forked from lei.chen/myxce
35 lines
929 B
C
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
|