Go to the documentation of this file.
21 #ifndef P99_ITERATOR_H
22 #define P99_ITERATOR_H
96 register unsigned const p00_act = p00_i->p00_act;
100 (p00_act < p00_seen),
105 p00_i->p00_act = p00_act + 1;
153 free(p00_e->p00_event);
169 P99_FPRINTF(stderr,
"next event on %s\n", (
void*)p00_e);
172 if (p00_pos < p00_e->p00_n)
173 while (!(p00_ret = p00_e->p00_event[p00_pos]));
174 P99_FPRINTF(stderr,
"next event on %s, returns %s pos %s\n", (
void*)p00_e, p00_ret, p00_pos);
188 p00_e->p00_event[p00_ret] = p00_w;
#define P99_FPRINTF(F, FORMAT,...)
p99_event * p99_event_init(p99_event *p00_e, unsigned p00_n)
Initialize an event.
#define P99_MEMZERO(T, TA, N)
A type oriented replacement for memset with argument 0.
void p99_futex_destroy(p99_futex *p00_c)
Destroy an p99_futex object.
A counter similar to a conditional variable that allows atomic increment and decrement and to wait fo...
struct p99_event p99_event
Iterate over a series events that are signaled by other threads.
void p99_event_destroy(p99_event *p00_e)
destroy an event
p99_iterator * p99_iterator_init(p99_iterator *p00_i)
Initialize an iterator.
void p99_iterator_destroy(p99_iterator *p00_i)
destroy a iterator
unsigned p99_iterator_signal(p99_iterator volatile *p00_i)
Signal an event.
#define p99_inline
Try to force a function always to be inlined.
#define P99_FUTEX_COMPARE_EXCHANGE(FUTEX, ACT, EXPECTED, DESIRED, WAKEMIN, WAKEMAX)
a catch all macro to operate on p99_futex
void * p99_event_next(p99_event volatile *p00_e)
Block until an event has been signaled that has not yet been accounted for.
#define P99_DEFARG_DOCU(NAME)
Provide a documentation section to a function defined with P99_CALL_DEFARG.
#define P99_DECLARE_STRUCT(NAME)
forward declaration of a struct NAME
void p99_event_signal(p99_event volatile *p00_e, void *p00_w)
Signal the event. p00_w.
unsigned p99_iterator_next(p99_iterator volatile *p00_i)
Block until an event has been signaled that has not yet been accounted for.
#define P99_MALLOC(X)
A type oriented malloc wrapper.
unsigned p99_futex_add(p99_futex volatile *p00_fut, unsigned p00_hmuch, unsigned p00_cstart, unsigned p00_clen, unsigned p00_wmin, unsigned p00_wmax)
increment the counter of p00_fut atomically by p00_hmuch.
#define P99_FUTEX_MAX_WAITERS
the maximum number of waiters that an p99_futex may have
p99_futex * p99_futex_init(p99_futex *p00_c, unsigned p00_ini)
Initialize an p99_futex object.
void * void_ptr
a pointer to void