public inbox for ~johnnyrichard/olang-devel@lists.sr.ht
 help / color / mirror / code / Atom feed
a3dd3fe54c9f4da7ae21ddd3b915ec9ad1953e35 blob 1768 bytes (raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
 
/*
 * Copyright (C) 2024 olang maintainers
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
#include "list.h"
#include <assert.h>

void
list_init(list_t *list, arena_t *arena)
{
    assert(list != NULL);
    list->size = 0;
    list->arena = arena;
    list->head = NULL;
}

void
list_append(list_t *list, void *value)
{
    assert(list != NULL);
    list_item_t *item = arena_alloc(list->arena, sizeof(list_item_t));
    item->value = value;
    item->next = NULL;
    list->size++;

    if (list->size == 1) {
        list->head = item;
        list->tail = item;
        return;
    }

    list->tail->next = item;
    list->tail = item;
}

list_item_t *
list_get(list_t *list, size_t index)
{
    assert(list != NULL);
    assert(index < list->size);

    list_item_t *item = list->head;

    while (index != 0) {
        item = item->next;

        index--;
    }

    return item;
}

list_item_t *
list_head(list_t *list)
{
    assert(list != NULL);
    return list->head;
}

list_item_t *
list_next(list_item_t *item)
{
    assert(item != NULL);
    return item->next;
}

size_t
list_size(list_t *list)
{
    assert(list != NULL);
    return list->size;
}
debug log:

solving a3dd3fe ...
found a3dd3fe in https://git.johnnyrichard.com/olang.git

Code repositories for project(s) associated with this public inbox

	https://git.johnnyrichard.com/olang.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox