/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 | } |