Lolly 1.4.27
Loading...
Searching...
No Matches
Functions
string.cpp File Reference
#include "string.hpp"
#include "basic.hpp"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
Include dependency graph for string.cpp:

Go to the source code of this file.

Functions

static int round_length (int n)
 
string copy (string s)
 
stringoperator<< (string &a, char x)
 
stringoperator<< (string &a, string b)
 
string operator* (string a, string b)
 
string operator* (const char *a, string b)
 
string operator* (string a, const char *b)
 
bool operator< (string s1, string s2)
 
bool operator<= (string s1, string s2)
 
int hash (string s)
 
bool as_bool (string s)
 
int as_int (string s)
 
long int as_long_int (string s)
 
double as_double (string s)
 
charas_charp (string s)
 
string as_string_bool (bool f)
 
string as_string (int16_t i)
 
string as_string (int32_t i)
 
string as_string (int64_t i)
 
string as_string (unsigned int i)
 
string as_string (unsigned long int i)
 
string as_string (double x)
 
string as_string (const char *s)
 
bool is_empty (string s)
 
bool is_bool (string s)
 
bool is_int (string s)
 
bool is_double (string s)
 
bool is_charp (string s)
 
bool is_quoted (string s)
 
bool is_id (string s)
 

Function Documentation

◆ round_length()

static int round_length ( int n)
inlinestatic

Definition at line 25 of file string.cpp.

25 {
26 n= (n + 3) & (0xfffffffc);
27 if (n < 24) return n;
28 int i= 32;
29 while (n > i)
30 i<<= 1;
31 return i;
32}

◆ copy()

string copy ( string s)

Definition at line 169 of file string.cpp.

169 {
170 int i, n= N (s);
171 string r (n);
172 for (i= 0; i < n; i++)
173 r[i]= s[i];
174 return r;
175}
int N(array< T > a)
Get the length of the array.
Definition array.hpp:170
The list class represents a linked list.
Definition list.hpp:48

◆ operator<<() [1/2]

string & operator<< ( string & a,
char x )

Definition at line 177 of file string.cpp.

178 {
179 int old_a_N= a->expand_or_shrink_by (1);
180 a[old_a_N] = x;
181 return a;
182}

◆ operator<<() [2/2]

string & operator<< ( string & a,
string b )

Definition at line 184 of file string.cpp.

185 {
186 int b_N = N (b);
187 int old_a_N= a->expand_or_shrink_by (b_N);
188 for (int i= 0; i < b_N; i++)
189 a[i + old_a_N]= b[i];
190 return a;
191}
blackbox b[13]

◆ operator*() [1/3]

Definition at line 194 of file string.cpp.

194 {
195 int i, n1= N (a), n2= N (b);
196 string c (n1 + n2);
197 for (i= 0; i < n1; i++)
198 c[i]= a[i];
199 for (i= 0; i < n2; i++)
200 c[i + n1]= b[i];
201 return c;
202}

◆ operator*() [2/3]

Definition at line 205 of file string.cpp.

205 {
206 return string (a) * b;
207}

◆ operator*() [3/3]

Definition at line 210 of file string.cpp.

210 {
211 return a * string (b);
212}

◆ operator<()

bool operator< ( string s1,
string s2 )

Definition at line 214 of file string.cpp.

215 {
216 return ((string_view<char>) s1) < ((string_view<char>) s2);
217}

◆ operator<=()

bool operator<= ( string s1,
string s2 )

Definition at line 219 of file string.cpp.

220 {
221 return ((string_view<char>) s1) <= ((string_view<char>) s2);
222}

◆ hash()

int hash ( string s)

Definition at line 225 of file string.cpp.

225 {
226 int h= 0;
227 for (char ch : s) {
228 h= (h << 9) + (h >> 23);
229 h= h + ((int) ch);
230 }
231 return h;
232}

◆ as_bool()

bool as_bool ( string s)

Definition at line 239 of file string.cpp.

239 {
240 return (s == "true" || s == "#t");
241}

◆ as_int()

int as_int ( string s)

Definition at line 244 of file string.cpp.

244 {
245 int i= 0, n= N (s), val= 0;
246 if (n == 0) return 0;
247 if (s[0] == '+') i++;
248 if (s[0] == '-') i++;
249 while (i < n) {
250 if (s[i] < '0') break;
251 if (s[i] > '9') break;
252 val*= 10;
253 val+= (int) (s[i] - '0');
254 i++;
255 }
256 if (s[0] == '-') val= -val;
257 return val;
258}

◆ as_long_int()

long int as_long_int ( string s)

Definition at line 261 of file string.cpp.

261 {
262 int i= 0, n= N (s);
263 long int val= 0;
264 if (n == 0) return 0;
265 if (s[0] == '+') i++;
266 if (s[0] == '-') i++;
267 while (i < n) {
268 if (s[i] < '0') break;
269 if (s[i] > '9') break;
270 val*= 10;
271 val+= (int) (s[i] - '0');
272 i++;
273 }
274 if (s[0] == '-') val= -val;
275 return val;
276}

◆ as_double()

double as_double ( string s)

Definition at line 279 of file string.cpp.

279 {
280 double x= 0.0;
281 {
282 int i, n= N (s);
283 STACK_NEW_ARRAY (buf, char, n + 1);
284 for (i= 0; i < n; i++)
285 buf[i]= s[i];
286 buf[n]= '\0';
287 sscanf (buf, "%lf", &x);
288 STACK_DELETE_ARRAY (buf);
289 } // in order to avoid segmentation fault due to compiler bug
290 return x;
291}
#define STACK_NEW_ARRAY(name, T, size)
Definition basic.hpp:43
#define STACK_DELETE_ARRAY(name)
Definition basic.hpp:44

◆ as_charp()

char * as_charp ( string s)

Definition at line 294 of file string.cpp.

294 {
295 int i, n= N (s);
296 char* s2= tm_new_array<char> (n + 1);
297 for (i= 0; i < n; i++)
298 s2[i]= s[i];
299 s2[n]= '\0';
300 return s2;
301}

◆ as_string_bool()

string as_string_bool ( bool f)

Definition at line 304 of file string.cpp.

304 {
305 if (f) return string ("true");
306 else return string ("false");
307}

◆ as_string() [1/7]

string as_string ( int16_t i)

Definition at line 310 of file string.cpp.

310 {
311 return string ((std::to_string (i)).c_str ());
312}

◆ as_string() [2/7]

string as_string ( int32_t i)

Definition at line 315 of file string.cpp.

315 {
316 return string ((std::to_string (i)).c_str ());
317}

◆ as_string() [3/7]

string as_string ( int64_t i)

Definition at line 320 of file string.cpp.

320 {
321 return string ((std::to_string (i)).c_str ());
322}

◆ as_string() [4/7]

string as_string ( unsigned int i)

Definition at line 325 of file string.cpp.

325 {
326 char buf[64];
327 sprintf (buf, "%u", i);
328 // sprintf (buf, "%u\0", i);
329 return string (buf);
330}

◆ as_string() [5/7]

string as_string ( unsigned long int i)

Definition at line 333 of file string.cpp.

333 {
334 char buf[64];
335 sprintf (buf, "%lu", i);
336 // sprintf (buf, "%lu\0", i);
337 return string (buf);
338}

◆ as_string() [6/7]

string as_string ( double x)

Definition at line 341 of file string.cpp.

341 {
342 char buf[64];
343 sprintf (buf, "%g", x);
344 // sprintf (buf, "%g\0", x);
345 return string (buf);
346}

◆ as_string() [7/7]

string as_string ( const char * s)

Definition at line 349 of file string.cpp.

349 {
350 return string (s);
351}

◆ is_empty()

bool is_empty ( string s)

Definition at line 354 of file string.cpp.

354 {
355 return N (s) == 0;
356}

◆ is_bool()

bool is_bool ( string s)

Definition at line 359 of file string.cpp.

359 {
360 return (s == "true") || (s == "false");
361}

◆ is_int()

bool is_int ( string s)

Definition at line 364 of file string.cpp.

364 {
365 int i= 0, n= N (s);
366 if (n == 0) return false;
367 if (s[i] == '+') i++;
368 if (s[i] == '-') i++;
369 if (i == n) return false;
370 for (; i < n; i++)
371 if ((s[i] < '0') || (s[i] > '9')) return false;
372 return true;
373}

◆ is_double()

bool is_double ( string s)

Definition at line 376 of file string.cpp.

376 {
377 int i= 0, n= N (s);
378 if (n == 0) return false;
379 if (s[i] == '+') i++;
380 if (s[i] == '-') i++;
381 if (i == n) return false;
382 for (; i < n; i++)
383 if ((s[i] < '0') || (s[i] > '9')) break;
384 if (i == n) return true;
385 if (s[i] == '.') {
386 i++;
387 if (i == n) return false;
388 for (; i < n; i++)
389 if ((s[i] < '0') || (s[i] > '9')) break;
390 }
391 if (i == n) return true;
392 if (s[i++] != 'e') return false;
393 if (s[i] == '+') i++;
394 if (s[i] == '-') i++;
395 if (i == n) return false;
396 for (; i < n; i++)
397 if ((s[i] < '0') || (s[i] > '9')) return false;
398 return true;
399}

◆ is_charp()

bool is_charp ( string s)

Definition at line 402 of file string.cpp.

402 {
403 (void) s;
404 return true;
405}

◆ is_quoted()

bool is_quoted ( string s)

Definition at line 408 of file string.cpp.

408 {
409 int n= N (s);
410 return (n >= 2) && (s[0] == '\"') && (s[n - 1] == '\"');
411}

◆ is_id()

bool is_id ( string s)

Definition at line 414 of file string.cpp.

414 {
415 int i= 0, n= N (s);
416 if (n == 0) return false;
417 for (i= 0; i < n; i++) {
418 if ((i > 0) && (s[i] >= '0') && (s[i] <= '9')) continue;
419 if ((s[i] >= 'a') && (s[i] <= 'z')) continue;
420 if ((s[i] >= 'A') && (s[i] <= 'Z')) continue;
421 if (s[i] == '_') continue;
422 return false;
423 }
424 return true;
425}