/*-------------------------------------------------------------*/
typedef struct {
netwib_wait *pwait;
netwib_uint32 waitident; /* because waitid exists */
} netwib_waitringitem;
/*-------------------------------------------------------------*/
/* Name : netwib_waitlist_init
Description :
Initialize a list of events. It can be use to wait for more
than 5 event (otherwise use netwib_wait_wait5) which is
easier.
Input parameter(s) :
Input/output parameter(s) :
**ppring : ring initialized
Output parameter(s) :
Normal return values :
NETWIB_ERR_OK : ok
*/
netwib_err netwib_waitlist_init(netwib_ring **ppring);
/*-------------------------------------------------------------*/
/* Name : netwib_waitlist_add
Description :
Add an event to the waiting ring.
Input parameter(s) :
waitident : id of the item to add (any value chosen by user)
*pwait : netwib_wait to add
Input/output parameter(s) :
*pring : ring where to add items
Output parameter(s) :
Normal return values :
NETWIB_ERR_OK : ok
*/
netwib_err netwib_waitlist_add(netwib_ring *pring,
netwib_wait *pwait,
netwib_uint32 waitident);
/*-------------------------------------------------------------*/
/* Name : netwib_waitlist_del
Description :
Remove an event to the waiting ring.
Input parameter(s) :
waitident : id of the item to remove
Input/output parameter(s) :
*pring : ring where to remove items
Output parameter(s) :
Normal return values :
NETWIB_ERR_OK : ok
*/
netwib_err netwib_waitlist_del(netwib_ring *pring,
netwib_uint32 waitident);
/*-------------------------------------------------------------*/
/* Name : netwib_waitlist_wait
Description :
Wait for an event in the waiting ring. The netwib_wait
is never closed by this function (different behavior
compared to netwib_threadlist_wait).
Input parameter(s) :
*pabstime : end time
Input/output parameter(s) :
*pring : ring where to wait for
Output parameter(s) :
*pevent : true if an event occurred. If *pabstime is
reached *pevent is set to NETWIB_FALSE.
*pringofwaitid : ring of all events id
This ring contains netwib_uintptr
cast-ed to netwib_ptr. This ring is
initialized only when there is an event.
It's user's job to close this ring with :
netwib_ring_close(ppringofwaitid, NETWIB_FALSE)
Normal return values :
NETWIB_ERR_OK : ok
NETWIB_ERR_DATAEND: ring is empty
*/
netwib_err netwib_waitlist_wait(netwib_ring *pring,
netwib_consttime *pabstime,
netwib_bool *pevent,
netwib_ring **ppringofwaitid);
#define netwib_waitlist_waitident_init_ptr(p) ((netwib_uint32)(netwib_uintptr)(p))
/*-------------------------------------------------------------*/
/***************************************************************
* For other functions, you can directly use functions of *
* ring.h. *
* To do so, booleans "eraseitems" and "duplicateitems" have *
* be set to NETWIB_TRUE. See netwib_waitlist_close for *
* example. *
***************************************************************/
#define netwib_waitlist_close(ppring) netwib_ring_close(ppring,NETWIB_TRUE)