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