1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #ifndef Q__H
17 #define Q__H
18
19 #ifndef False_
20 #define False_ 0
21 #endif
22
23 #ifndef True_
24 #define True_ 1
25 #endif
26
27 typedef struct nodeptr datanode;
28
29 typedef struct nodeptr {
30 void *data ;
31 datanode *prev, *next ;
32 } node ;
33
34
35 typedef struct nodeptr* q_iter;
36
37 typedef struct {
38 node *head, *tail, *cursor;
39 int size, sorted, item_deleted;
40 } queue;
41
42 typedef struct {
43 void *dataptr;
44 node *loc ;
45 } index_elt ;
46
47
48 int Q_Init(queue *q);
49 void Q_Destroy(queue *q);
50 int Q_IsEmpty(queue *q);
51 int Q_Size(queue *q);
52 int Q_AtHead(queue *q);
53 int Q_AtTail(queue *q);
54 int Q_PushHead(queue *q, void *d);
55 int Q_PushTail(queue *q, void *d);
56 void *Q_Head(queue *q);
57 void *Q_Tail(queue *q);
58 void *Q_PopHead(queue *q);
59 void *Q_PopTail(queue *q);
60 void *Q_Next(queue *q);
61 void *Q_Previous(queue *q);
62 void *Q_DelCur(queue *q);
63 void *Q_Get(queue *q);
64 int Q_Put(queue *q, void *data);
65 int Q_Sort(queue *q, int (*Comp)(const void *, const void *));
66 int Q_Find(queue *q, void *data,
67 int (*Comp)(const void *, const void *));
68 void *Q_Seek(queue *q, void *data,
69 int (*Comp)(const void *, const void *));
70 int Q_Insert(queue *q, void *data,
71 int (*Comp)(const void *, const void *));
72
73
74 q_iter Q_Iter_Head(queue *q);
75 q_iter Q_Iter_Tail(queue *q);
76 q_iter Q_Iter_Next(q_iter qi);
77 q_iter Q_Iter_Prev(q_iter qi);
78 void* Q_Iter_Get(q_iter qi);
79 int Q_Iter_Put(q_iter qi, void* data);
80 void* Q_Iter_Del(queue *q, q_iter iter);
81
82
83 #define Q_Iter_Head_F(q) (q ? (q_iter)((queue*)q)->head : NULL)
84 #define Q_Iter_Tail_F(q) (q ? (q_iter)((queue*)q)->tail : NULL)
85 #define Q_Iter_Next_F(qi) (qi ? (q_iter)((node*)qi)->next : NULL)
86 #define Q_Iter_Prev_F(qi) (qi ? (q_iter)((node*)qi)->prev : NULL)
87 #define Q_Iter_Get_F(qi) (qi ? ((node*)qi)->data : NULL)
88
89 #endif