Kestrel Interface
Loading...
Searching...
No Matches
kest_string.c
Go to the documentation of this file.
1#include "kest_int.h"
2
4
5int char_cmp(const char *a, const char *b)
6{
7 if (!a || !b) return -1;
8 if (*a == *b) return 0;
9 return 1;
10}
11
13{
14 return char_list_init(string);
15}
16
18{
19 if (!str)
20 return kest_string_init(string);
21
22 int len = strlen(str);
23
24 int ret_val = kest_string_init_reserved(string, len);
25
26 if (ret_val != NO_ERROR)
27 return ret_val;
28
29 memcpy(string->entries, str, len);
30
31 string->count = len;
32
33 return NO_ERROR;
34}
35
37{
38 return char_list_init_with_allocator(string, alloc);
39}
40
42{
43 return char_list_init_reserved(string, n);
44}
45
47{
48 return char_list_init_reserved_with_allocator(string, n, alloc);
49}
50
51int kest_string_reserve(kest_string *string, size_t n)
52{
53 return char_list_reserve(string, n);
54}
55
56int kest_string_append(kest_string *string, char x)
57{
58 return char_list_append(string, x);
59}
60
62{
63 if (!string)
64 return ERR_NULL_PTR;
65
66 char buf[128];
67
68 snprintf(buf, 128, "%d", x);
69
70 return kest_string_append_str(string, buf);
71}
72
73int kest_string_append_str(kest_string *string, const char *str)
74{
75 if (!string)
76 return ERR_NULL_PTR;
77
78 if (!str)
79 return NO_ERROR;
80
81 int len = strlen(str);
82
83 char_list_reserve(string, len);
84
85 memcpy(&string->entries[string->count], str, sizeof(char) * len);
86
87 string->count += len;
88
89 return NO_ERROR;
90}
91
93{
94 return char_list_append_list(a, b);
95}
96
98{
99 return char_list_destroy(string);
100}
101
103{
104 return char_list_contains(string, c, char_cmp);
105}
106
108{
109 return char_list_index_of(string, x, char_cmp);
110}
111
113{
114 return char_list_head(string);
115}
116
118{
119 return char_list_tail(string);
120}
121
123{
124 return char_list_pop_tail(string);
125}
126
128{
129 return char_list_drain(string);
130}
131
133{
134 return string->count;
135}
136
137int kest_string_write_out(kest_string *string, char *buf, size_t buf_len)
138{
139 if (!buf)
140 return ERR_NULL_PTR;
141
142 if (buf_len == 0)
143 return ERR_BAD_ARGS;
144
145 buf[0] = 0;
146
147 if (!string)
148 return ERR_NULL_PTR;
149
150 if (!string->count)
151 return NO_ERROR;
152
153 if (!string->entries)
154 return ERR_BAD_ARGS;
155
156 size_t len = string->count;
157
158 if (len > buf_len - 1)
159 len = buf_len - 1;
160
161 memcpy(buf, string->entries, len);
162 buf[len] = 0;
163
164 return NO_ERROR;
165}
166
168{
169 if (!string)
170 return NULL;
171
172 size_t len = string->count;
173
174 char *result = kest_alloc(len + 1);
175
176 if (!result)
177 return NULL;
178
179 if (string->entries)
180 memcpy(result, string->entries, len);
181 else
182 result[0] = 0;
183
184 result[len] = 0;
185
186 return result;
187}
188
190{
191 if (!string)
192 return NULL;
193
194 size_t len = string->count;
195
196 char *result = kest_allocator_alloc(alloc, len + 1);
197
198 if (!result)
199 return NULL;
200
201 if (string->entries)
202 memcpy(result, string->entries, len);
203 else
204 result[0] = 0;
205
206 result[len] = 0;
207
208 return result;
209}
210
211int kest_string_appendf(kest_string *string, const char *fmt, ...)
212{
213 if (!string || !fmt)
214 return ERR_NULL_PTR;
215
216 char buf[1024];
217 va_list args;
218 va_start(args, fmt);
219 int n = vsnprintf(buf, 1024, fmt, args);
220 va_end(args);
221
222 if (n < 0)
223 return ERR_BAD_ARGS;
224
225 kest_string_append_str(string, buf);
226
227 return NO_ERROR;
228}
void * kest_allocator_alloc(kest_allocator *a, size_t n)
Definition kest_alloc.c:177
void * kest_alloc(size_t size)
Definition kest_alloc.c:11
#define ERR_BAD_ARGS
#define NO_ERROR
#define ERR_NULL_PTR
#define IMPLEMENT_LIST(X)
Definition kest_list.h:33
int kest_string_init_reserved(kest_string *string, size_t n)
Definition kest_string.c:41
char * kest_string_tail(kest_string *string)
int kest_string_concat(kest_string *a, kest_string *b)
Definition kest_string.c:92
int kest_string_write_out(kest_string *string, char *buf, size_t buf_len)
int kest_string_pop_tail(kest_string *string)
int kest_string_init_from_str(kest_string *string, char *str)
Definition kest_string.c:17
int kest_string_contains(kest_string *string, char c)
int kest_string_append(kest_string *string, char x)
Definition kest_string.c:56
char * kest_string_to_native(kest_string *string)
int kest_string_init_with_allocator(kest_string *string, const kest_allocator *alloc)
Definition kest_string.c:36
int kest_string_appendf(kest_string *string, const char *fmt,...)
int char_cmp(const char *a, const char *b)
Definition kest_string.c:5
int kest_string_init_reserved_with_allocator(kest_string *string, size_t n, const kest_allocator *alloc)
Definition kest_string.c:46
char * kest_string_head(kest_string *string)
char * kest_string_to_native_with_allocator(kest_string *string, kest_allocator *alloc)
int kest_string_index_of(kest_string *string, char x)
int kest_string_len(kest_string *string)
int kest_string_append_str(kest_string *string, const char *str)
Definition kest_string.c:73
int kest_string_init(kest_string *string)
Definition kest_string.c:12
int kest_string_append_int(kest_string *string, int x)
Definition kest_string.c:61
int kest_string_destroy(kest_string *string)
Definition kest_string.c:97
int kest_string_drain(kest_string *string)
int kest_string_reserve(kest_string *string, size_t n)
Definition kest_string.c:51
char_list kest_string
Definition kest_string.h:6