Exemple #1
0
void klist_init(klist *self) {
    self->head = klist_node_new(NULL);
    self->head->next = self->tail;
    self->head->prev = self->head;

    self->tail = klist_node_new(NULL);
    self->tail->prev = self->head;
    self->tail->next = self->tail;

    self->length = 0;
}
Exemple #2
0
void klist_append(klist *self, void *data) {
    struct klist_node *node = klist_node_new(data);
    node->prev = self->tail->prev;
    node->next = self->tail;
    self->tail->prev->next = node;
    self->tail->prev = node;
    self->length++;
}
Exemple #3
0
void klist_prepend(klist *self, void *data) {
    struct klist_node *node = klist_node_new(data);

    node->next = self->head->next;
    node->prev = self->head;
    self->head->next->prev = node;
    self->head->next = node;
    self->length++;
}
Exemple #4
0
Fichier : klist.c Projet : EQ4/vis
void klist_append(klist l, const char* s) {
    struct klist_node* newnode = klist_node_new(s);
    if (l->tail == NULL) {
        VIS_ASSERT(klist_empty(l));
        l->head = l->tail = newnode;
    } else {
        VIS_ASSERT(!klist_empty(l));
        newnode->prev = l->tail;
        l->tail->next = newnode;
        l->tail = newnode;
    }
    l->length += 1;
}
Exemple #5
0
static int klist_iter_insert_after(kiter *iter, void *el) {
    struct klist_iter *self = (struct klist_iter *)iter;
    struct klist_node *node;

    if (self->node == self->list->tail) {
        return -1;
    }

    node = klist_node_new(el);
    node->prev = self->node;
    node->next = self->node->next;
    node->prev->next = node;
    node->next->prev = node;

    return 0;
}