1#ifndef re2c_substr_h
2#define re2c_substr_h
3
4#include <stdio.h>
5#include <stdlib.h>
6#include "tools/re2c/basics.h"
7
8struct SubStr {
9    char		*str;
10    unsigned int	len;
11};
12
13typedef struct SubStr SubStr;
14
15int SubStr_eq(const SubStr *, const SubStr *);
16
17static void SubStr_init_u(SubStr*, unsigned char*, unsigned int);
18static SubStr *SubStr_new_u(unsigned char*, unsigned int);
19
20static void SubStr_init(SubStr*, char*, unsigned int);
21static SubStr *SubStr_new(char*, unsigned int);
22
23static void SubStr_copy(SubStr*, const SubStr*);
24static SubStr *SubStr_new_copy(const SubStr*);
25
26void SubStr_out(const SubStr*, FILE *);
27#define SubStr_delete(x)    free(x)
28
29typedef struct SubStr Str;
30
31void Str_init(Str*, const SubStr*);
32Str *Str_new(const SubStr*);
33
34void Str_copy(Str*, Str*);
35Str *Str_new_copy(Str*);
36
37Str *Str_new_empty(void);
38void Str_destroy(Str *);
39void Str_delete(Str *);
40
41static void
42SubStr_init_u(SubStr *r, unsigned char *s, unsigned int l)
43{
44    r->str = (char*)s;
45    r->len = l;
46}
47
48static SubStr *
49SubStr_new_u(unsigned char *s, unsigned int l)
50{
51    SubStr *r = malloc(sizeof(SubStr));
52    r->str = (char*)s;
53    r->len = l;
54    return r;
55}
56
57static void
58SubStr_init(SubStr *r, char *s, unsigned int l)
59{
60    r->str = s;
61    r->len = l;
62}
63
64static SubStr *
65SubStr_new(char *s, unsigned int l)
66{
67    SubStr *r = malloc(sizeof(SubStr));
68    r->str = s;
69    r->len = l;
70    return r;
71}
72
73static void
74SubStr_copy(SubStr *r, const SubStr *s)
75{
76    r->str = s->str;
77    r->len = s->len;
78}
79
80static SubStr *
81SubStr_new_copy(const SubStr *s)
82{
83    SubStr *r = malloc(sizeof(SubStr));
84    r->str = s->str;
85    r->len = s->len;
86    return r;
87}
88
89#endif
90