-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdeque.h
47 lines (32 loc) · 969 Bytes
/
deque.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#ifndef _DEQUE_H
#define _DEQUE_H
typedef void* DequeVal;
typedef struct _dequetype{
void*(*dequeValDup)(void* val);
void(*dequeValFree)(void* val);
} DequeType, *pDequeType ;
typedef struct _deqentry{
void* val;
struct _deqentry* prev;
struct _deqentry* next;
} DequeEntry, *pDequeEntry;
typedef struct _deque{
pDequeType type;
pDequeEntry head;
pDequeEntry tail;
size_t count;
}Deque, *pDeque;
pDeque new_deque(pDequeType type);
void dealloc_deque(pDeque deque);
int deque_append(pDeque deque, void* val);
int deque_appendleft(pDeque deque, void* val);
int deque_swap(pDeque deque, pDequeEntry e1, pDequeEntry e2);
int deque_move_head(pDeque deque, pDequeEntry entry);
pDequeEntry deque_pop(pDeque deque);
pDequeEntry deque_popleft(pDeque deque);
size_t deque_size(pDeque deque);
#define dequeFreeEntry(deque, val) do {\
if(deque->type->dequeValFree)\
deque->type->dequeValFree(val);\
} while(0)
#endif