From ea27bb406e3d8fe9466ba274af38e6f540ff5bfc Mon Sep 17 00:00:00 2001 From: Alexander Wirt Date: Sun, 3 Jun 2012 08:49:55 +0200 Subject: Imported Upstream version 1.2.1 --- include/queue.h | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 include/queue.h (limited to 'include/queue.h') diff --git a/include/queue.h b/include/queue.h new file mode 100644 index 0000000..188e106 --- /dev/null +++ b/include/queue.h @@ -0,0 +1,62 @@ +#ifndef _QUEUE_H_ +#define _QUEUE_H_ + +#include +#include "linux_list.h" + +struct queue_node { + struct list_head head; + uint32_t type; + struct queue *owner; + size_t size; +}; + +enum { + Q_ELEM_OBJ = 0, + Q_ELEM_CTL = 1, + Q_ELEM_ERR = 2, +}; + +void queue_node_init(struct queue_node *n, int type); +void *queue_node_data(struct queue_node *n); + +struct queue_object { + struct queue_node qnode; + char data[0]; +}; + +struct queue_object *queue_object_new(int type, size_t size); +void queue_object_free(struct queue_object *obj); + +struct evfd; + +#define QUEUE_NAMELEN 16 + +struct queue { + struct list_head list; + unsigned int max_elems; + unsigned int num_elems; + uint32_t enospc_err; + uint32_t flags; + struct list_head head; + struct evfd *evfd; + char name[QUEUE_NAMELEN]; +}; + +#define QUEUE_F_EVFD (1U << 0) + +struct queue *queue_create(const char *name, + int max_objects, unsigned int flags); +void queue_destroy(struct queue *b); +void queue_stats_show(int fd); +unsigned int queue_len(const struct queue *b); +int queue_add(struct queue *b, struct queue_node *n); +int queue_del(struct queue_node *n); +struct queue_node *queue_del_head(struct queue *b); +int queue_in(struct queue *b, struct queue_node *n); +void queue_iterate(struct queue *b, + const void *data, + int (*iterate)(struct queue_node *n, const void *data2)); +int queue_get_eventfd(struct queue *b); + +#endif -- cgit v1.2.3