current version
[opsoft_test.git] / silentbob / gclib / include / gclib / dlist.h
blob97e3406373d7ba723b209cfe232bfd33eaf20054
1 /*
2 * (c) Oleg Puchinin 2006
3 * graycardinalster@gmail.com
5 */
7 #ifndef DEFINE_DLIST_H
8 #define DEFINE_DLIST_H
10 struct __dlist_entry_t;
11 struct __dlist_entry_t {
12 char * data;
13 __dlist_entry_t * next;
14 __dlist_entry_t * prev;
17 class DList {
18 public:
19 inline DList () {
20 head = NULL;
21 tail = NULL;
22 dont_free = false;
23 ecount = 0;
26 ~DList ();
28 inline char * init (char * one) {
29 head = new_one (one);
30 tail = head;
31 return one;
34 char * init (__dlist_entry_t * one);
35 char * add_head (char *);
36 char * add_tail (char *);
37 void rm (__dlist_entry_t *);
39 inline void del (__dlist_entry_t *entry) {
40 rm (entry);
43 inline void remove (__dlist_entry_t *entry) {
44 rm (entry);
47 void detach (__dlist_entry_t * one);
48 char * add_after (__dlist_entry_t *, char *);
49 char * add_before (__dlist_entry_t *, char *);
50 char * add_entry_head (__dlist_entry_t * one);
51 char * add_entry_tail (__dlist_entry_t * one);
52 char * add_entry_after (__dlist_entry_t *, __dlist_entry_t *);
53 char * add_entry_before (__dlist_entry_t *, __dlist_entry_t *);
54 void foreach (Dfunc_t);
56 inline __dlist_entry_t * new_one (char * one) {
57 __dlist_entry_t *entry;
58 entry = new __dlist_entry_t;
59 memset (entry, 0, sizeof (__dlist_entry_t));
60 entry->data = one;
61 ++ecount;
62 return entry;
65 inline int count () {
66 return ecount;
69 inline __dlist_entry_t * get_head () {
70 return head;
73 inline __dlist_entry_t * get_tail () {
74 return tail;
77 __dlist_entry_t * get_entry_at (int N);
78 char * get_at (int N);
80 bool dont_free;
82 private:
83 __dlist_entry_t * head;
84 __dlist_entry_t * tail;
85 int ecount;
87 #endif