Coverage Report

Created: 2024-05-03 06:05

/builds/xfbs/passgen/src/pattern/segment.c
Line
Count
Source
1
#include "passgen/pattern/segment.h"
2
#include "passgen/container/stack.h"
3
#include "passgen/pattern/group.h"
4
#include "passgen/pattern/literal.h"
5
#include "passgen/pattern/repeat.h"
6
#include "passgen/pattern/segment_item.h"
7
#include "passgen/pattern/set.h"
8
9
36.6k
void passgen_pattern_segment_init(passgen_pattern_segment *segment) {
10
36.6k
    segment->multiplier = 1;
11
36.6k
    passgen_stack_init(&segment->items, sizeof(passgen_pattern_item));
12
36.6k
}
13
14
36.6k
void passgen_pattern_segment_free(passgen_pattern_segment *segment) {
15
108k
    for(size_t i = 0; i < segment->items.len; 
i++71.8k
) {
16
71.8k
        passgen_pattern_item *item = passgen_stack_get(&segment->items, i);
17
71.8k
18
71.8k
        passgen_pattern_item_free(item);
19
71.8k
    }
20
36.6k
21
36.6k
    passgen_stack_free(&segment->items);
22
36.6k
}
23
24
passgen_pattern_item *
25
71.9k
passgen_pattern_segment_new_item(passgen_pattern_segment *segment) {
26
71.9k
    passgen_pattern_item *item = passgen_stack_push(&segment->items, NULL);
27
71.9k
    passgen_pattern_item_init(item);
28
71.9k
29
71.9k
    return item;
30
71.9k
}
31
32
passgen_pattern_literal *
33
62.1k
passgen_pattern_segment_new_char(passgen_pattern_segment *segment) {
34
62.1k
    passgen_pattern_item *item = passgen_pattern_segment_new_item(segment);
35
62.1k
    item->kind = PASSGEN_PATTERN_LITERAL;
36
62.1k
    passgen_pattern_literal_init(&item->data.literal);
37
62.1k
38
62.1k
    return &item->data.literal;
39
62.1k
}
40
41
passgen_pattern_set *
42
3.09k
passgen_pattern_segment_new_set(passgen_pattern_segment *segment) {
43
3.09k
    passgen_pattern_item *item = passgen_pattern_segment_new_item(segment);
44
3.09k
    item->kind = PASSGEN_PATTERN_SET;
45
3.09k
    passgen_pattern_set_init(&item->data.set);
46
3.09k
47
3.09k
    return &item->data.set;
48
3.09k
}
49
50
passgen_pattern_group *
51
3.24k
passgen_pattern_segment_new_group(passgen_pattern_segment *segment) {
52
3.24k
    passgen_pattern_item *item = passgen_pattern_segment_new_item(segment);
53
3.24k
    item->kind = PASSGEN_PATTERN_GROUP;
54
3.24k
    passgen_pattern_group_init(&item->data.group);
55
3.24k
56
3.24k
    return &item->data.group;
57
3.24k
}
58
59
passgen_pattern_special *
60
135
passgen_pattern_segment_new_special(passgen_pattern_segment *segment) {
61
135
    passgen_pattern_item *item = passgen_pattern_segment_new_item(segment);
62
135
    item->kind = PASSGEN_PATTERN_SPECIAL;
63
135
64
135
    return &item->data.special;
65
135
}
66
67
passgen_pattern_item *
68
35
passgen_pattern_segment_get_item(passgen_pattern_segment *segment, size_t n) {
69
35
    return passgen_stack_get(&segment->items, n);
70
35
}