myxce/src/include/ordq.h

35 lines
929 B
C

#if !defined(_ORDQ_H_)
#define _ORDQ_H_ 1
#include <stdarg.h>
#include <stdint.h>
#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