Annotation of embedaddon/php/ext/xmlrpc/libxmlrpc/queue.h, revision 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>