1 // ================================================================
2 // Singly-linked list of void-star, with tail for append.
3 // ================================================================
4 
5 #ifndef SLLV_H
6 #define SLLV_H
7 
8 typedef struct _sllve_t {
9 	void* pvvalue;
10 	struct _sllve_t *pnext;
11 } sllve_t;
12 
13 typedef struct _sllv_t {
14 	sllve_t *phead;
15 	sllve_t *ptail;
16 	unsigned long long length;
17 } sllv_t;
18 
19 sllv_t* sllv_alloc();
20 void    sllv_free(sllv_t* plist);
21 sllv_t* sllv_single(void* pvvalue);
22 void    sllv_append(sllv_t* plist,  void* pvvalue); // Add at tail
23 void    sllv_push(sllv_t* plist, void* pvvalue); // Add at head
24 void*   sllv_pop(sllv_t* plist);
25 void    sllv_reverse(sllv_t* plist);
26 // Move all records from pthat to end of pthis. Upon return, pthat is the empty
27 // list.
28 void    sllv_transfer(sllv_t* pthis, sllv_t* pthat);
29 
30 #endif // SLLV_H
31 
32