Annotation of embedaddon/php/ext/xmlrpc/libxmlrpc/queue.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Date last modified: Jan 2001
3: * Modifications by Dan Libby (dan@libby.com), including:
4: * - various fixes, null checks, etc
5: * - addition of Q_Iter funcs, macros
6: */
7:
8: /*
9: * File : q.h
10: *
11: * Peter Yard 02 Jan 1993.
12: *
13: * Disclaimer: This code is released to the public domain.
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: /* For external use with Q_Iter* funcs */
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: /* read only funcs for iterating through queue. above funcs modify queue */
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); /* not read only! here for completeness. */
80: void* Q_Iter_Del(queue *q, q_iter iter); /* not read only! here for completeness. */
81:
82: /* Fast (macro'd) versions of above */
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 /* Q__H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>