Ruby  3.4.0dev (2024-11-05 revision e440268d51fe02b303e3817a7a733a0dac1c5091)
pm_list.c
1 #include "prism/util/pm_list.h"
2 
8  return list->head == NULL;
9 }
10 
16  return list->size;
17 }
18 
22 void
24  if (list->head == NULL) {
25  list->head = node;
26  } else {
27  list->tail->next = node;
28  }
29 
30  list->tail = node;
31  list->size++;
32 }
33 
39  pm_list_node_t *node = list->head;
40  pm_list_node_t *next;
41 
42  while (node != NULL) {
43  next = node->next;
44  xfree(node);
45  node = next;
46  }
47 
48  list->size = 0;
49 }
#define xfree
Old name of ruby_xfree.
Definition: xmalloc.h:58
An abstract linked list.
PRISM_EXPORTED_FUNCTION bool pm_list_empty_p(pm_list_t *list)
Returns true if the given list is empty.
Definition: pm_list.c:7
PRISM_EXPORTED_FUNCTION size_t pm_list_size(pm_list_t *list)
Returns the size of the list.
Definition: pm_list.c:15
void pm_list_append(pm_list_t *list, pm_list_node_t *node)
Append a node to the given list.
Definition: pm_list.c:23
PRISM_EXPORTED_FUNCTION void pm_list_free(pm_list_t *list)
Deallocate the internal state of the given list.
Definition: pm_list.c:38
#define PRISM_EXPORTED_FUNCTION
By default, we compile with -fvisibility=hidden.
Definition: defines.h:50
This struct represents an abstract linked list that provides common functionality.
Definition: pm_list.h:46
struct pm_list_node * next
A pointer to the next node in the list.
Definition: pm_list.h:48
This represents the overall linked list.
Definition: pm_list.h:55
pm_list_node_t * tail
A pointer to the tail of the list.
Definition: pm_list.h:63
pm_list_node_t * head
A pointer to the head of the list.
Definition: pm_list.h:60
size_t size
The size of the list.
Definition: pm_list.h:57