blob: 188e106c2b65dd30a88d9b9336f5e1c435eb32fa [file] [log] [blame]
#ifndef _QUEUE_H_
#define _QUEUE_H_
#include <stdint.h>
#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