22#include "../compiler/compiler.h"
30#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L
31#define __vsf_when(__cond) (__cond)
32#define vsf_when(__cond) __vsf_when(__cond)
34#define __vsf_when(...) (__VA_ARGS__)
35#define vsf_when(...) __vsf_when(__VA_ARGS__)
38#define __vsf_list_tmp_name(__head) VSF_MCONNECT2(__head, __LINE__)
44#define __vsf_slist_is_empty(__list_ptr) \
45 (NULL == ((vsf_slist_t *)(__list_ptr))->head)
47#define __vsf_slist_set_next(__node_ptr, __item_next_ptr) \
49 ((vsf_slist_node_t *)(__node_ptr))->next = (__item_next_ptr); \
52#define __vsf_slist_ref_next(__node_ptr, __item_ref_ptr) \
54 (*(void **)&(__item_ref_ptr)) = \
55 (((vsf_slist_node_t *)(__node_ptr))->next); \
58#define __vsf_slist_insert_next(__host_type, __member, __node_ptr, __item_ptr) \
60 __vsf_slist_set_next(&((__item_ptr)->__member), ((__node_ptr)->next)); \
61 __vsf_slist_set_next((__node_ptr), (__item_ptr)); \
64#define __vsf_slist_remove_next_unsafe( __host_type, \
69 __vsf_slist_ref_next((__node_ptr), (__item_ref_ptr)); \
70 __vsf_slist_set_next((__node_ptr), \
71 ((__host_type *)(__item_ref_ptr))->__member.next); \
74#define __vsf_slist_insert_after( __host_type, \
79 vsf_slist_node_t *__vsf_list_tmp_name(node) = &((__item_ptr)->__member);\
80 __vsf_slist_insert_next(__host_type, __member, \
81 __vsf_list_tmp_name(node), (__item_new_ptr)); \
84#define __vsf_slist_remove_after( __host_type, \
89 vsf_slist_node_t *__vsf_list_tmp_name(node) = &((__item_ptr)->__member);\
90 __vsf_slist_ref_next(__vsf_list_tmp_name(node), (__item_ref_ptr)); \
91 if (NULL != __vsf_list_tmp_name(node)->next) { \
92 __vsf_slist_set_next(__vsf_list_tmp_name(node), \
93 ((__host_type *)(__vsf_list_tmp_name(node)->next))->__member.next);\
94 __vsf_slist_set_next(&((__item_ref_ptr)->__member), NULL); \
99#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L
100# define __vsf_slist_insert( __host_type, \
106 vsf_slist_node_t *__vsf_list_tmp_name(node) = \
107 (vsf_slist_node_t *)(__list_ptr); \
108 vsf_slist_init_node(__host_type, __member, __item_ptr); \
109 for (; __vsf_list_tmp_name(node)->next != NULL;){ \
110 const __host_type * const _ = \
111 (__host_type *)(__vsf_list_tmp_name(node)->next); \
114 __vsf_slist_insert_next(__host_type, __member, \
115 __vsf_list_tmp_name(node), (__item_ptr)); \
118 __vsf_list_tmp_name(node) = (vsf_slist_node_t *)&(_->__member); \
120 if (NULL == __vsf_list_tmp_name(node)->next) { \
121 __vsf_slist_insert_next(__host_type, __member, \
122 __vsf_list_tmp_name(node), (__item_ptr)); \
127# define __vsf_slist_insert( __host_type, \
133 vsf_slist_init_node(__host_type, __member, __item_ptr); \
134 vsf_slist_node_t *__vsf_list_tmp_name(node) = \
135 (vsf_slist_node_t *)(__list_ptr); \
136 for (; __vsf_list_tmp_name(node)->next != NULL;){ \
137 const __host_type * const _ = \
138 (__host_type *)(__vsf_list_tmp_name(node)->next); \
141 __vsf_slist_insert_next(__host_type, __member, \
142 __vsf_list_tmp_name(node), (__item_ptr)); \
145 __vsf_list_tmp_name(node) = (vsf_slist_node_t *)&(_->__member); \
147 if (NULL == __vsf_list_tmp_name(node)->next) { \
148 __vsf_slist_insert_next(__host_type, __member, \
149 __vsf_list_tmp_name(node), (__item_ptr)); \
155#define __vsf_slist_foreach_unsafe( \
159 for ( __host_type *_ = (__host_type *)((__list_ptr)->head); \
161 _ = (__host_type *)(_->__member.next))
163#define __vsf_slist_foreach_next_unsafe( \
167 for ( __host_type *_ = (__host_type *)((__list_ptr)->head), \
168 *__ = _ ? (__host_type *)(_->__member.next) : NULL; \
170 _ = __, __ = _ ? (__host_type *)(_->__member.next) : NULL)
173#define __vsf_slist_foreach(__host_type, \
178 *__item_ptr = (__host_type *)(__list_ptr)->head, \
182 ((__host_type *)((__list_ptr)->head))->__member.next \
184 __item_ptr != NULL; \
185 _ = __item_ptr = next, next = __item_ptr \
187 ((__host_type *)((__list_ptr)->head))->__member.next \
190#define __vsf_slist_discard_head(__host_type, __member, __list_ptr) \
191 if (NULL != (__list_ptr)->head) { \
192 __host_type *item = (__host_type *)((__list_ptr)->head); \
193 __vsf_slist_set_next( \
195 ((__host_type *)((__list_ptr)->head))->__member.next); \
196 item->__member.next = NULL; \
200#define __vsf_slist_queue_init(__queue_ptr) \
202 __vsf_slist_set_next(&((__queue_ptr)->head), NULL); \
203 __vsf_slist_set_next(&((__queue_ptr)->tail), NULL); \
206#define __vsf_slist_queue_enqueue(__host_type, __member, __queue_ptr, __item_ptr)\
208 __host_type * __vsf_list_tmp_name(host_tail) = \
209 (__host_type *)((__queue_ptr)->tail.next); \
210 __vsf_slist_set_next(&((__queue_ptr)->tail), (__item_ptr)); \
211 if (__vsf_list_tmp_name(host_tail) != NULL) \
212 __vsf_slist_set_next(&__vsf_list_tmp_name(host_tail)->__member, (__item_ptr));\
214 __vsf_slist_set_next(&((__queue_ptr)->head), (__item_ptr)); \
217#define __vsf_slist_queue_dequeue( __host_type, \
222 __vsf_slist_ref_next(&((__queue_ptr)->head), (__item_ref_ptr)); \
223 if (NULL != (__item_ref_ptr)) { \
224 __vsf_slist_set_next( \
225 &((__queue_ptr)->head), \
226 (__item_ref_ptr)->__member.next); \
227 if (__vsf_slist_is_empty(&((__queue_ptr)->head))) \
228 __vsf_slist_set_next(&((__queue_ptr)->tail), NULL); \
229 __vsf_slist_set_next(&((__item_ref_ptr)->__member), NULL); \
233#define __vsf_slist_queue_is_in(__host_type, __member, __queue_ptr, __item_ptr) \
234 vsf_slist_is_in(__host_type, __member, (vsf_slist_t *)&(__queue_ptr)->head, (__item_ptr))
236#define __vsf_slist_queue_peek( __host_type, \
240 __vsf_slist_ref_next(&((__queue_ptr)->head), (__item_ref_ptr));
243#define __vsf_slist_queue_add_to_head( __host_type, \
248 __host_type * __vsf_list_tmp_name(host_head) = \
249 (__host_type *)((__queue_ptr)->head.next); \
250 __vsf_slist_set_next(&(__item_ptr)->__member, \
251 __vsf_list_tmp_name(host_head)); \
252 __vsf_slist_set_next(&((__queue_ptr)->head), (__item_ptr)); \
253 if (NULL == __vsf_list_tmp_name(host_head)) \
254 __vsf_slist_set_next(&((__queue_ptr)->tail), (__item_ptr)); \
261#define __vsf_dlist_init(__list_ptr) \
263 (__list_ptr)->head = (__list_ptr)->tail = NULL; \
266#define __vsf_dlist_init_node(__node_ptr) \
268 (__node_ptr)->next = (__node_ptr)->prev = NULL; \
271#define __vsf_dlist_get_host(__host_type, __member, __node_ptr) \
272 vsf_container_of((__node_ptr), __host_type, __member)
274#define __vsf_dlist_get_host_safe(__host_type, __member, __node_ptr) \
275 vsf_safe_container_of((__node_ptr), __host_type, __member)
277#define __vsf_dlist_is_empty(__list_ptr) ((__list_ptr)->head == NULL)
279#define __vsf_dlist_is_in(__list_ptr, __node_ptr) \
280 __vsf_dlist_is_in_imp((__list_ptr), (__node_ptr))
282#define __vsf_dlist_ref(__host_type, __member, __node_ptr, __item_ref_ptr) \
284 (*(__host_type **)&(__item_ref_ptr)) = \
285 __vsf_dlist_get_host(__host_type, __member, __node_ptr); \
288#define __vsf_dlist_ref_safe(__host_type, __member, __node_ptr, __item_ref_ptr) \
290 (*(__host_type **)&(__item_ref_ptr)) = \
291 __vsf_dlist_get_host_safe(__host_type, __member, __node_ptr); \
294#define __vsf_dlist_add_to_head(__host_type, __member, __list_ptr, __item_ptr) \
295 __vsf_dlist_add_to_head_imp((__list_ptr), &((__item_ptr)->__member))
297#define __vsf_dlist_add_to_tail(__host_type, __member, __list_ptr, __item_ptr) \
298 __vsf_dlist_add_to_tail_imp((__list_ptr), &((__item_ptr)->__member))
300#define __vsf_dlist_peek_next(__host_type, __member, __item_ptr, __item_ref_ptr)\
302 vsf_dlist_node_t *__vsf_list_tmp_name(node) = (__item_ptr)->__member.next;\
303 __vsf_dlist_ref_safe(__host_type, __member, \
304 __vsf_list_tmp_name(node), (__item_ref_ptr)); \
307#define __vsf_dlist_peek_head(__host_type, __member, __list_ptr, __item_ref_ptr)\
309 vsf_dlist_node_t *__vsf_list_tmp_name(node) = (__list_ptr)->head; \
310 __vsf_dlist_ref_safe(__host_type, __member, \
311 __vsf_list_tmp_name(node), (__item_ref_ptr)); \
314#define __vsf_dlist_remove_head(__host_type, \
319 vsf_dlist_node_t *__vsf_list_tmp_name(node) = \
320 __vsf_dlist_remove_head_imp(__list_ptr); \
321 __vsf_dlist_ref_safe(__host_type, __member, \
322 __vsf_list_tmp_name(node), (__item_ref_ptr)); \
325#define __vsf_dlist_remove_tail(__host_type, \
330 vsf_dlist_node_t *__vsf_list_tmp_name(node) = \
331 __vsf_dlist_remove_tail_imp(__list_ptr); \
332 __vsf_dlist_ref_safe(__host_type, __member, \
333 __vsf_list_tmp_name(node), (__item_ref_ptr)); \
336#define __vsf_dlist_insert_after( \
337 __host_type, __member, __list_ptr, __item_prv_ptr, __item_ptr) \
338 __vsf_dlist_insert_after_imp( \
340 &((__item_prv_ptr)->__member), \
341 &((__item_ptr)->__member))
343#define __vsf_dlist_insert_before( \
344 __host_type, __member, __list_ptr, __item_next_ptr, __item_ptr) \
345 __vsf_dlist_insert_before_imp( \
347 &((__item_next_ptr)->__member), \
348 &((__item_ptr)->__member))
350#define __vsf_dlist_remove(__host_type, __member, __list_ptr, __item_ptr) \
351 __vsf_dlist_remove_imp((__list_ptr), &((__item_ptr)->__member))
353#define __vsf_dlist_remove_after( \
354 __host_type, __member, __list_ptr, __node_ptr, __item_ref_ptr) \
356 vsf_dlist_node_t *__vsf_list_tmp_name(node_nxt) = (__node_ptr)->next; \
357 if (__vsf_list_tmp_name(node_nxt) != NULL) { \
358 __vsf_dlist_remove(__host_type, __member, __list_ptr, \
359 __vsf_list_tmp_name(node_nxt)); \
360 __vsf_dlist_ref(__host_type, __member, \
361 __vsf_list_tmp_name(node_nxt), (__item_ref_ptr)); \
363 (*(__host_type **)&(__item_ref_ptr)) = NULL; \
367#define __vsf_dlist_remove_before( \
368 __host_type, __member, __list_ptr, __node_ptr, __item_ref_ptr) \
370 vsf_dlist_node_t *__vsf_list_tmp_name(node_prv) = (__node_ptr)->prev; \
371 if (__vsf_list_tmp_name(node_prv) != NULL) { \
372 __vsf_dlist_remove(__host_type, __member, __list_ptr, \
373 __vsf_list_tmp_name(node_prv)); \
374 __vsf_dlist_ref(__host_type, __member, \
375 __vsf_list_tmp_name(node_prv), (__item_ref_ptr)); \
377 (*(__host_type **)&(__item_ref_ptr)) = NULL; \
381#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L
382# define __vsf_dlist_insert( __host_type, \
388 vsf_dlist_node_t *__vsf_list_tmp_name(node) = \
389 (vsf_dlist_node_t *)(__list_ptr); \
390 vsf_dlist_init_node(__host_type, __member, __item_ptr); \
391 for (; __vsf_list_tmp_name(node)->next != NULL;){ \
392 const __host_type * const _ = __vsf_dlist_get_host(__host_type, \
393 __member, __vsf_list_tmp_name(node)->next); \
396 __vsf_dlist_insert_before_imp((__list_ptr), \
397 __vsf_list_tmp_name(node)->next, &((__item_ptr)->__member));\
400 __vsf_list_tmp_name(node) = __vsf_list_tmp_name(node)->next; \
402 if (NULL == __vsf_list_tmp_name(node)->next) { \
403 __vsf_dlist_add_to_tail( \
404 __host_type, __member, __list_ptr, (__item_ptr)); \
408# define __vsf_dlist_insert( __host_type, \
414 vsf_dlist_init_node(__host_type, __member, __item_ptr); \
415 vsf_dlist_node_t *__vsf_list_tmp_name(node) = \
416 (vsf_dlist_node_t *)(__list_ptr); \
417 for (; __vsf_list_tmp_name(node)->next != NULL;){ \
418 const __host_type * const _ = __vsf_dlist_get_host(__host_type, \
419 __member, __vsf_list_tmp_name(node)->next); \
422 __vsf_dlist_insert_before_imp((__list_ptr), \
423 __vsf_list_tmp_name(node)->next, &((__item_ptr)->__member));\
426 __vsf_list_tmp_name(node) = __vsf_list_tmp_name(node)->next; \
428 if (NULL == __vsf_list_tmp_name(node)->next) { \
429 __vsf_dlist_add_to_tail( \
430 __host_type, __member, __list_ptr, (__item_ptr)); \
435#define __vsf_dlist_foreach_unsafe( \
439 for ( __host_type *_ = NULL == (__list_ptr)->head ? NULL : \
440 __vsf_dlist_get_host(__host_type, __member, (__list_ptr)->head);\
442 _ = NULL == _->__member.next ? NULL : \
443 __vsf_dlist_get_host(__host_type, __member, _->__member.next))
445#define __vsf_dlist_foreach_next_unsafe( \
450 *_ = NULL == (__list_ptr)->head ? NULL : \
451 __vsf_dlist_get_host(__host_type, __member, (__list_ptr)->head),\
452 *__ = (NULL == _ || NULL == _->__member.next) ? NULL : \
453 __vsf_dlist_get_host(__host_type, __member, _->__member.next);\
455 _ = __, __ = (NULL == _ || NULL == _->__member.next) ? NULL : \
456 __vsf_dlist_get_host(__host_type, __member, _->__member.next))
465#define vsf_slist_init(__list_ptr) \
466 __vsf_slist_set_next((__list_ptr), NULL)
468#define vsf_slist_is_empty(__list_ptr) \
469 __vsf_slist_is_empty(__list_ptr)
471#define vsf_slist_set_next( __host_type, \
475 __vsf_slist_set_next((__node_ptr), (__item_ptr))
477#define vsf_slist_get_length( __host_type, \
480 __vsf_slist_get_length_imp( \
481 (__list_ptr), vsf_offset_of(__host_type, __member))
483#define vsf_slist_remove_tail( __host_type, \
486 __vsf_slist_remove_tail_imp( \
487 (__list_ptr), vsf_offset_of(__host_type, __member))
489#define vsf_slist_get_item_by_index( \
494 __vsf_slist_get_item_by_index_imp( \
495 (__list_ptr), (__index), vsf_offset_of(__host_type, __member))
497#define vsf_slist_get_index( __host_type, \
501 __vsf_slist_get_index_imp( \
502 (__list_ptr), (__item_ptr), vsf_offset_of(__host_type, __member))
504#define vsf_slist_append( __host_type, \
508 __vsf_slist_append_imp( \
509 (__list_ptr), (__item_ptr), vsf_offset_of(__host_type, __member))
511#define vsf_slist_is_in( __host_type, \
515 ( vsf_slist_get_index( \
516 __host_type, __member, (__list_ptr), (__item_ptr)) \
519#define vsf_slist_init_node(__host_type, \
522 __vsf_slist_set_next(&((__item_ptr)->__member), NULL)
524#define vsf_slist_remove( __host_type, \
528 __vsf_slist_remove_imp( \
529 (__list_ptr), (__item_ptr), vsf_offset_of(__host_type, __member))
531#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L
532# define vsf_slist_insert(__host_type, \
537 __vsf_slist_insert( \
538 __host_type, __member, (__list_ptr), (__item_ptr), (__cond))
540# define vsf_slist_insert(__host_type, \
545 __vsf_slist_insert( \
546 __host_type, __member, (__list_ptr), (__item_ptr), __VA_ARGS__)
549#define vsf_slist_remove_after( __host_type, \
553 __vsf_slist_remove_after( \
554 __host_type, __member, (__item_ptr), (__item_ref_ptr))
556#define vsf_slist_insert_after( __host_type, \
560 __vsf_slist_insert_after( \
561 __host_type, __member, (__item_ptr), (__item_new_ptr))
568#define vsf_slist_stack_init(__list_ptr) vsf_slist_init_node(__list_ptr)
570#define vsf_slist_stack_pop(__host_type, \
574 vsf_slist_remove_from_head( \
575 __host_type, __member, (__list_ptr), (__item_ref_ptr))
578#define vsf_slist_stack_push( __host_type, \
582 vsf_slist_add_to_head( \
583 __host_type, __member, (__list_ptr), (__item_ptr))
586#define vsf_slist_add_to_head( __host_type, \
590 __vsf_slist_insert_next( \
593 (vsf_slist_node_t *)(__list_ptr), \
596#define vsf_slist_discard_head( __host_type, \
599 __vsf_slist_discard_head(__host_type, __member, (__list_ptr))
601#define vsf_slist_remove_from_head_unsafe( \
606 __vsf_slist_remove_next_unsafe( \
609 (vsf_slist_node_t *)(__list_ptr), \
612#define vsf_slist_remove_from_head( \
618 vsf_slist_peek_next(__host_type, __member, (__list_ptr), (__item_ref_ptr));\
619 vsf_slist_discard_head(__host_type, __member, (__list_ptr)); \
621#define vsf_slist_remove_head vsf_slist_remove_from_head
623#define vsf_slist_peek_next(__host_type, \
627 __vsf_slist_ref_next((__node_ptr), (__item_ref_ptr))
632#define vsf_slist_foreach( __host_type, \
636 __vsf_slist_foreach(__host_type, __member, (__list_ptr), __item_ptr)
642#define vsf_slist_queue_is_empty(__queue_ptr) \
643 vsf_slist_is_empty(&(__queue_ptr)->head)
645#define vsf_slist_queue_init(__queue_ptr) \
646 __vsf_slist_queue_init((__queue_ptr))
648#define vsf_slist_queue_enqueue(__host_type, \
652 __vsf_slist_queue_enqueue( \
653 __host_type, __member, (__queue_ptr), (__item_ptr))
655#define vsf_slist_queue_dequeue(__host_type, \
659 __vsf_slist_queue_dequeue( \
660 __host_type, __member, (__queue_ptr), (__item_ref_ptr))
662#define vsf_slist_queue_is_in( __host_type, \
666 __vsf_slist_queue_is_in( \
667 __host_type, __member, (__queue_ptr), (__item_ptr))
669#define vsf_slist_queue_peek( __host_type, \
673 __vsf_slist_queue_peek( \
674 __host_type, __member, (__queue_ptr), (__item_ref_ptr))
676#define vsf_slist_queue_add_to_head( \
681 __vsf_slist_queue_add_to_head( \
682 __host_type, __member, (__queue_ptr), (__item_ptr))
702#define vsf_dlist_init(__list_ptr) \
703 __vsf_dlist_init(__list_ptr)
705#define vsf_dlist_is_empty(__list_ptr) \
706 __vsf_dlist_is_empty(__list_ptr)
708#define vsf_dlist_get_length( __list_ptr) \
709 __vsf_dlist_get_length_imp(__list_ptr)
711#define vsf_dlist_is_in( __host_type, \
715 __vsf_dlist_is_in((__list_ptr), &(__item_ptr)->__member)
717#define vsf_dlist_init_node( __host_type, \
720 __vsf_dlist_init_node(&((__item_ptr)->__member))
722#define vsf_dlist_add_to_head( __host_type, \
726 __vsf_dlist_add_to_head(__host_type, \
731#define vsf_dlist_add_to_tail( __host_type, \
735 __vsf_dlist_add_to_tail(__host_type, \
740#define vsf_dlist_peek_head( __host_type, \
744 __vsf_dlist_peek_head( \
745 __host_type, __member, (__list_ptr), (__item_ref_ptr))
747#define vsf_dlist_peek_next( __host_type, \
751 __vsf_dlist_peek_next( \
752 __host_type, __member, (__item_ptr), (__item_ref_ptr))
754#define vsf_dlist_remove_head( __host_type, \
758 __vsf_dlist_remove_head( \
759 __host_type, __member, (__list_ptr), (__item_ref_ptr))
761#define vsf_dlist_remove_tail( __host_type, \
765 __vsf_dlist_remove_tail( \
766 __host_type, __member, (__list_ptr), (__item_ref_ptr))
768#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L
769# define vsf_dlist_insert( __host_type, \
774 __vsf_dlist_insert( \
775 __host_type, __member, (__list_ptr), (__item_ptr), (__cond))
777# define vsf_dlist_insert( __host_type, \
782 __vsf_dlist_insert( \
783 __host_type, __member, (__list_ptr), (__item_ptr), __VA_ARGS__)
786#define vsf_dlist_insert_after( __host_type, \
791 __vsf_dlist_insert_after( \
798#define vsf_dlist_insert_before(__host_type, \
803 __vsf_dlist_insert_before( \
810#define vsf_dlist_remove( __host_type, \
814 __vsf_dlist_remove(__host_type, __member, (__list_ptr), (__item_ptr))
816#define vsf_dlist_remove_after( __host_type, \
821 __vsf_dlist_remove_after( \
828#define vsf_dlist_remove_before(__host_type, \
833 __vsf_dlist_remove_before( \
845#define vsf_dlist_queue_peek( __host_type, \
849 __vsf_dlist_ref_safe( \
850 __host_type, __member, (__list_ptr)->head, (__item_ref_ptr))
852#define vsf_dlist_queue_enqueue(__host_type, \
856 vsf_dlist_add_to_tail( \
857 __host_type, __member, (__list_ptr), (__item_ptr))
859#define vsf_dlist_queue_dequeue(__host_type, \
863 vsf_dlist_remove_head( \
864 __host_type, __member, (__list_ptr), (__item_ref_ptr))
unsigned short uint_fast16_t
Definition stdint.h:25
short int_fast16_t
Definition stdint.h:24
Definition vsf_list.h:888
struct vsf_dlist_node_t * next
Definition vsf_list.h:889
struct vsf_dlist_node_t * prev
Definition vsf_list.h:890
Definition vsf_list.h:883
struct vsf_dlist_node_t * tail
Definition vsf_list.h:885
struct vsf_dlist_node_t * head
Definition vsf_list.h:884
Definition vsf_list.h:876
void * next
Definition vsf_list.h:877
Definition vsf_list.h:896
vsf_slist_node_t tail
Definition vsf_list.h:898
vsf_slist_node_t head
Definition vsf_list.h:897
Definition vsf_list.h:872
void * head
Definition vsf_list.h:873
void __vsf_dlist_add_to_tail_imp(vsf_dlist_t *this_ptr, vsf_dlist_node_t *node)
Definition vsf_list.c:210
vsf_dlist_node_t * __vsf_dlist_remove_head_imp(vsf_dlist_t *this_ptr)
Definition vsf_list.c:224
void __vsf_dlist_add_to_head_imp(vsf_dlist_t *this_ptr, vsf_dlist_node_t *node)
Definition vsf_list.c:196
void __vsf_dlist_remove_imp(vsf_dlist_t *this_ptr, vsf_dlist_node_t *node)
Definition vsf_list.c:290
uint_fast16_t __vsf_dlist_get_length_imp(vsf_dlist_t *this_ptr)
Definition vsf_list.c:177
vsf_dlist_node_t * __vsf_dlist_remove_tail_imp(vsf_dlist_t *this_ptr)
Definition vsf_list.c:241
void * __vsf_slist_append_imp(vsf_slist_t *this_ptr, void *item, size_t list_offset)
append a item from the target list !
Definition vsf_list.c:151
bool __vsf_dlist_is_in_imp(vsf_dlist_t *this_ptr, vsf_dlist_node_t *node)
Definition vsf_list.c:191
void * __vsf_slist_remove_tail_imp(vsf_slist_t *this_ptr, size_t list_offset)
Definition vsf_list.c:164
int_fast16_t __vsf_slist_get_index_imp(vsf_slist_t *this_ptr, void *item, size_t list_offset)
find the index number of a given item from the target list !
Definition vsf_list.c:98
uint_fast16_t __vsf_slist_get_length_imp(vsf_slist_t *this_ptr, size_t list_offset)
calculate the length of the target list !
Definition vsf_list.c:51
void __vsf_dlist_insert_before_imp(vsf_dlist_t *this_ptr, vsf_dlist_node_t *node_nxt, vsf_dlist_node_t *node)
Definition vsf_list.c:274
void * __vsf_slist_remove_imp(vsf_slist_t *this_ptr, void *item, size_t list_offset)
remove a item from the target list !
Definition vsf_list.c:124
void * __vsf_slist_get_item_by_index_imp(vsf_slist_t *this_ptr, uint_fast16_t index, size_t list_offset)
get the specified item with a given index from the target list !
Definition vsf_list.c:71
void __vsf_dlist_insert_after_imp(vsf_dlist_t *this_ptr, vsf_dlist_node_t *node_prv, vsf_dlist_node_t *node)
Definition vsf_list.c:258