root/ext/xmlrpc/libxmlrpc/queue.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 */

/* [<][>][^][v][top][bottom][index][help] */