#ifndef PZK_DEQUEUE_H_
#define PZK_DEQUEUE_H_
#include <stdlib.h>
#include <pthread.h>
struct pzk_dequeue_node {
struct pzk_dequeue_node* prev;
struct pzk_dequeue_node* next;
void* value;
};
typedef struct pzk_dequeue_node pzk_dequeue_node_t;
typedef struct pzk_dequeue {
pzk_dequeue_node_t* first;
pzk_dequeue_node_t* last;
size_t size;
pthread_mutex_t* mutex;
int (*push) (struct pzk_dequeue*, void*);
void* (*pop) (struct pzk_dequeue*);
int (*unshift) (struct pzk_dequeue*, void*);
void* (*shift) (struct pzk_dequeue*);
void (*destroy) (struct pzk_dequeue*);
} pzk_dequeue_t;
pzk_dequeue_t* new_pzk_dequeue();
#endif // ifndef PZK_DEQUEUE_H_