2 * (c) Oleg Puchinin 2006
3 * graycardinalster@gmail.com
17 __dlist_entry_t
* one
;
18 __dlist_entry_t
* d_del
;
19 if (! head
|| dont_free
)
32 char * DList::init (__dlist_entry_t
* one
)
39 char * DList::add_head (char * one
)
41 __dlist_entry_t
*entry
;
46 entry
= new_one (one
);
54 char * DList::add_tail (char * one
)
56 __dlist_entry_t
* entry
;
60 entry
= new_one (one
);
68 void DList::rm (__dlist_entry_t
* one
)
74 if (one
== tail
&& one
== head
) {
95 one
->prev
->next
= one
->next
;
96 one
->next
->prev
= one
->prev
;
100 void DList::detach (__dlist_entry_t
* one
)
105 if (one
== tail
&& one
== head
) {
123 one
->prev
->next
= one
->next
;
124 one
->next
->prev
= one
->prev
;
128 char * DList::add_after (__dlist_entry_t
*two
, char * one
)
130 __dlist_entry_t
* entry
;
136 return add_tail (one
);
138 entry
= new_one (one
);
141 entry
->next
= two
->next
;
142 two
->next
->prev
= entry
;
150 char * DList::add_before (__dlist_entry_t
*two
, char * one
)
152 __dlist_entry_t
* entry
;
158 return add_head (one
);
160 entry
= new_one (one
);
163 entry
->prev
= two
->prev
;
164 two
->prev
->next
= entry
;
172 void DList::foreach (Dfunc_t f
)
174 __dlist_entry_t
* entry
;
177 f((void *) entry
->data
);
182 char * DList::add_entry_head (__dlist_entry_t
* one
)
193 char * DList::add_entry_tail (__dlist_entry_t
* one
)
204 __dlist_entry_t
* DList::get_entry_at (int N
)
206 __dlist_entry_t
* one
;
210 while ((one
= one
->next
) && one
&& --N
);
214 char * DList::get_at (int N
)
216 __dlist_entry_t
* one
;
217 one
= get_entry_at (N
);