#if !defined(_ORDQ_H_) #define _ORDQ_H_ 1 #include #include #include "mylock.h" typedef struct _ordq_item { struct _ordq_item* next; void* data; } ordq_item_t; typedef int (*ordq_cmp_fn_t)(void*, void*, void*); typedef void (*ordq_data_killer_t)(void*); typedef int (*ordq_match_fn_t)(void*, va_list); typedef struct { mylock_t lock; ordq_item_t* head; ordq_data_killer_t killer; ordq_cmp_fn_t cmp; void* ctx; } ordq_t; extern int ordq_init(ordq_t*, ordq_data_killer_t, ordq_cmp_fn_t); extern void ordq_fini(ordq_t* q); extern int ordq_put(ordq_t*, void*); extern int ordq_del(ordq_t*, ordq_match_fn_t, ...); extern ordq_item_t* ordq_get(ordq_t*, ordq_match_fn_t, ...); extern ordq_item_t* ordq_peek(ordq_t*, ordq_match_fn_t, ...); extern void ordq_set_ctx(ordq_t*, void*); #endif