LCOV - code coverage report
Current view: top level - src/pattern - segment.c (source / functions) Hit Total Coverage
Test: passgen-test.info Lines: 35 35 100.0 %
Date: 2024-04-26 06:05:40 Functions: 8 8 100.0 %

          Line data    Source code
       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       36458 : void passgen_pattern_segment_init(passgen_pattern_segment *segment) {
      10       36458 :     segment->multiplier = 1;
      11       36458 :     passgen_stack_init(&segment->items, sizeof(passgen_pattern_item));
      12       36458 : }
      13             : 
      14       36458 : void passgen_pattern_segment_free(passgen_pattern_segment *segment) {
      15      108295 :     for(size_t i = 0; i < segment->items.len; i++) {
      16       71837 :         passgen_pattern_item *item = passgen_stack_get(&segment->items, i);
      17             : 
      18       71837 :         passgen_pattern_item_free(item);
      19             :     }
      20             : 
      21       36458 :     passgen_stack_free(&segment->items);
      22       36458 : }
      23             : 
      24             : passgen_pattern_item *
      25       71990 : passgen_pattern_segment_new_item(passgen_pattern_segment *segment) {
      26       71990 :     passgen_pattern_item *item = passgen_stack_push(&segment->items, NULL);
      27       71990 :     passgen_pattern_item_init(item);
      28             : 
      29       71990 :     return item;
      30             : }
      31             : 
      32             : passgen_pattern_literal *
      33       62262 : passgen_pattern_segment_new_char(passgen_pattern_segment *segment) {
      34       62262 :     passgen_pattern_item *item = passgen_pattern_segment_new_item(segment);
      35       62262 :     item->kind = PASSGEN_PATTERN_LITERAL;
      36       62262 :     passgen_pattern_literal_init(&item->data.literal);
      37             : 
      38       62262 :     return &item->data.literal;
      39             : }
      40             : 
      41             : passgen_pattern_set *
      42        3146 : passgen_pattern_segment_new_set(passgen_pattern_segment *segment) {
      43        3146 :     passgen_pattern_item *item = passgen_pattern_segment_new_item(segment);
      44        3146 :     item->kind = PASSGEN_PATTERN_SET;
      45        3146 :     passgen_pattern_set_init(&item->data.set);
      46             : 
      47        3146 :     return &item->data.set;
      48             : }
      49             : 
      50             : passgen_pattern_group *
      51        3172 : passgen_pattern_segment_new_group(passgen_pattern_segment *segment) {
      52        3172 :     passgen_pattern_item *item = passgen_pattern_segment_new_item(segment);
      53        3172 :     item->kind = PASSGEN_PATTERN_GROUP;
      54        3172 :     passgen_pattern_group_init(&item->data.group);
      55             : 
      56        3172 :     return &item->data.group;
      57             : }
      58             : 
      59             : passgen_pattern_special *
      60         129 : passgen_pattern_segment_new_special(passgen_pattern_segment *segment) {
      61         129 :     passgen_pattern_item *item = passgen_pattern_segment_new_item(segment);
      62         129 :     item->kind = PASSGEN_PATTERN_SPECIAL;
      63             : 
      64         129 :     return &item->data.special;
      65             : }
      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             : }

Generated by: LCOV version 1.14