1
4
5# ifndef LMT_STRINGPOOL_H
6# define LMT_STRINGPOOL_H
7
8
18
19typedef struct lstring {
20 union {
21 unsigned char *s;
22 const char *c;
23 };
24 size_t l;
25} lstring;
26
27typedef struct string_pool_info {
28 lstring *string_pool;
29 memory_data string_pool_data;
30 memory_data string_body_data;
31 strnumber reserved;
32
33 int string_max_length;
34
35 unsigned char *string_temp;
36 int string_temp_allocated;
37 int string_temp_top;
38} string_pool_info;
39
40extern string_pool_info lmt_string_pool_state;
41
42# define STRING_EXTRA_AMOUNT 512
43
44
45
46# define get_nullstr() cs_offset_value
47
48
59
60# define str_length(a) (lmt_string_pool_state.string_pool[(a) - cs_offset_value].l)
61# define str_string(a) (lmt_string_pool_state.string_pool[(a) - cs_offset_value].s)
62# define str_lstring(a) (lmt_string_pool_state.string_pool[(a) - cs_offset_value])
63
64
76
77
78
79static inline void tex_flush_char(void) { --lmt_string_pool_state.string_temp_top; }
80
81extern strnumber tex_make_string (void);
82extern strnumber tex_push_string (const unsigned char *s, int l);
83extern char *tex_take_string (int *len);
84extern int tex_str_eq_buf (strnumber s, int k, int n);
85extern int tex_str_eq_str (strnumber s, strnumber t);
86extern int tex_str_eq_cstr (strnumber s, const char *, size_t);
87extern int tex_get_strings_started (void);
88extern void tex_reset_cur_string (void);
89
90
91extern strnumber tex_maketexstring (const char *s);
92extern strnumber tex_maketexlstring (const char *s, size_t);
93extern void tex_append_char (unsigned char c);
94extern void tex_append_string (const unsigned char *s, unsigned l);
95extern char *tex_makecstring (int s, int *allocated);
96extern char *tex_makeclstring (int s, size_t *len);
97extern void tex_dump_string_pool (dumpstream f);
98extern void tex_undump_string_pool (dumpstream f);
99extern void tex_initialize_string_pool (void);
100extern void tex_initialize_string_mem (void);
101extern void tex_flush_str (strnumber s);
102extern strnumber tex_save_cur_string (void);
103extern void tex_restore_cur_string (strnumber u);
104extern void tex_compact_string_pool (void);
105
106
107
108static inline const char *tex_to_cstring (int s) { return str_length(s) > 0 ? (char *) str_string(s) : ""; }
109
110# endif
111 |