Coverage Report

Created: 2026-02-23 20:32

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/Users/alexjokela/projects/lattice/src/ds/vec.c
Line
Count
Source
1
#include "ds/vec.h"
2
#include <stdlib.h>
3
#include <string.h>
4
5
11.3k
#define INITIAL_CAP 8
6
7
12.9k
LatVec lat_vec_new(size_t elem_size) {
8
12.9k
    LatVec v;
9
12.9k
    v.data = NULL;
10
12.9k
    v.len = 0;
11
12.9k
    v.cap = 0;
12
12.9k
    v.elem_size = elem_size;
13
12.9k
    return v;
14
12.9k
}
15
16
12.9k
void lat_vec_free(LatVec *v) {
17
12.9k
    free(v->data);
18
12.9k
    v->data = NULL;
19
12.9k
    v->len = 0;
20
12.9k
    v->cap = 0;
21
12.9k
}
22
23
19.2k
static void lat_vec_grow(LatVec *v) {
24
19.2k
    size_t new_cap = v->cap == 0 ? INITIAL_CAP : v->cap * 2;
25
19.2k
    v->data = realloc(v->data, new_cap * v->elem_size);
26
19.2k
    v->cap = new_cap;
27
19.2k
}
28
29
500k
void lat_vec_push(LatVec *v, const void *elem) {
30
500k
    if (v->len >= v->cap) {
31
19.2k
        lat_vec_grow(v);
32
19.2k
    }
33
500k
    memcpy((char *)v->data + v->len * v->elem_size, elem, v->elem_size);
34
500k
    v->len++;
35
500k
}
36
37
39.2k
bool lat_vec_pop(LatVec *v, void *out) {
38
39.2k
    if (v->len == 0) return false;
39
39.2k
    v->len--;
40
39.2k
    if (out) {
41
3
        memcpy(out, (char *)v->data + v->len * v->elem_size, v->elem_size);
42
3
    }
43
39.2k
    return true;
44
39.2k
}
45
46
465k
void *lat_vec_get(const LatVec *v, size_t index) {
47
465k
    if (index >= v->len) return NULL;
48
465k
    return (char *)v->data + index * v->elem_size;
49
465k
}
50
51
3
void lat_vec_set(LatVec *v, size_t index, const void *elem) {
52
3
    if (index >= v->len) return;
53
3
    memcpy((char *)v->data + index * v->elem_size, elem, v->elem_size);
54
3
}
55
56
0
void lat_vec_clear(LatVec *v) {
57
0
    v->len = 0;
58
0
}
59
60
0
void lat_vec_reserve(LatVec *v, size_t cap) {
61
0
    if (cap <= v->cap) return;
62
0
    v->data = realloc(v->data, cap * v->elem_size);
63
0
    v->cap = cap;
64
0
}