File: dlist.h

package info (click to toggle)
poc-streamer 0.4.2-7
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid, trixie
  • size: 1,000 kB
  • sloc: ansic: 8,782; makefile: 307; ruby: 152; perl: 135; yacc: 115; lex: 36; sh: 30
file content (80 lines) | stat: -rw-r--r-- 2,166 bytes parent folder | download | duplicates (4)
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*C
  (c) 2005 bl0rg.net
**/

#ifndef DLIST_H__
#define DLIST_H__

/*M
  \emph{Double-linked list node structure.}
**/
typedef struct dlist_s {
   void             *data;
   struct dlist_s *next;
   struct dlist_s *prev;
} dlist_t;

/*M
  \emph{Cast to a single operand list operation.}
**/
#define DLIST_OP(f) (void (*)(void *))(f)
/*M
  \emph{Cast to a dual operand list operation.}
**/
#define DLIST_OP2(f) (int (*)(void *, void *))(f)

/*M
  \emph{Double-linked list head structure.}
**/
typedef struct dlist_head_s {
   struct dlist_s *dlist;
   struct dlist_s *end;
   unsigned int     num;
} dlist_head_t;

/*C
**/

void dlist_init(dlist_head_t *head);

dlist_t *dlist_new(void *data);
void dlist_free(dlist_t *dlist);
void dlist_delete(dlist_t *dlist,
      void (*free)(void *));
void dlist_destroy(dlist_head_t *head,
      void (*free)(void *data));

int dlist_insl_after(dlist_head_t *head, 
                     dlist_t *dlist, 
                     dlist_t *new);
int dlist_insl_before(dlist_head_t *head, 
                      dlist_t *dlist, 
                      dlist_t *new);
dlist_t *dlist_ins_after(dlist_head_t *head, 
                         dlist_t *dlist, 
                         void *data);
dlist_t *dlist_ins_before(dlist_head_t *head, 
                          dlist_t *dlist, 
                          void *data);
int dlist_insl_end(dlist_head_t *head, dlist_t *dlist);
int dlist_insl_front(dlist_head_t *head, dlist_t *dlist);
dlist_t *dlist_ins_end(dlist_head_t *head, void *data);
dlist_t *dlist_ins_front(dlist_head_t *head, void *data);

dlist_t *dlist_getl(dlist_head_t *head, dlist_t *dlist);
void *dlist_get(dlist_head_t *head, dlist_t *dlist);
dlist_t *dlist_getl_end(dlist_head_t *head);
dlist_t *dlist_getl_front(dlist_head_t *head);
void *dlist_get_end(dlist_head_t *head);
void *dlist_get_front(dlist_head_t *head);
void *dlist_front(dlist_head_t *head);
void *dlist_end(dlist_head_t *head);

dlist_t *dlist_search(dlist_head_t *head,
      void *data,
      int (*cmp)(void *data, void *data2));

#define dlist_push(h, x) dlist_ins_front((h), (x))
#define dlist_pop(h) dlist_get_front((h))

#endif /* DLIST_H__ */