zring_t * zring_new (void) { zring_t *self = (zring_t *) zmalloc (sizeof (zring_t)); if (self) { self->head = s_node_new (NULL, NULL, NULL); self->cursor = self->head; } return self; }
zlistx_t * zlistx_new (void) { zlistx_t *self = (zlistx_t *) zmalloc (sizeof (zlistx_t)); assert (self); self->head = s_node_new (NULL); assert (self->head); self->cursor = self->head; self->comparator = s_comparator; return self; }
int zring_append (zring_t *self, void *item) { assert (self); node_t *node = s_node_new (self->head->prev, self->head, item); if (node) { self->head->prev->next = node; self->head->prev = node; self->cursor = node; self->size++; return 0; } else return -1; // Ran out of heap memory }
void * zlistx_insert (zlistx_t *self, void *item, bool low_value) { assert (self); if (self->duplicator) { item = (self->duplicator) (item); assert (item); } node_t *node = s_node_new (item); assert (node); zlistx_reorder (self, node, low_value); self->cursor = self->head; self->size++; return node; }
zlistx_t * zlistx_new (void) { zlistx_t *self = (zlistx_t *) zmalloc (sizeof (zlistx_t)); if (self) { self->head = s_node_new (NULL); if (self->head) { self->cursor = self->head; self->comparator = s_comparator; } else zlistx_destroy (&self); } return self; }
void * zlistx_insert (zlistx_t *self, void *item, bool low_value) { assert (self); if (self->duplicator) { item = (self->duplicator)(item); if (!item) return NULL; // Out of memory } node_t *node = s_node_new (item); if (node) { zlistx_reorder (self, node, low_value); self->cursor = self->head; self->size++; } return node; }
void * zlistx_add_end (zlistx_t *self, void *item) { assert (self); assert (item); if (self->duplicator) { item = (self->duplicator) (item); assert (item); } node_t *node = s_node_new (item); assert (node); // Insert before head s_node_relink (node, self->head->prev, self->head); self->cursor = self->head; self->size++; return node; }
void * zlistx_add_start (zlistx_t *self, void *item) { assert (self); assert (item); if (self->duplicator) { item = (self->duplicator) (item); assert (item); } node_t *node = s_node_new (item); assert (node); // Insert after head s_node_relink (node, self->head, self->head->next); self->cursor = self->head; self->size++; return node; }