libstring
simple flexible string manipulation library
 All Data Structures Files Functions Variables Typedefs Macros
libstring.h
Go to the documentation of this file.
1 
5 #ifndef _LIBSTRING_INC
6 #define _LIBSTRING_INC
7 #include <stdlib.h>
8 #include <stdint.h>
9 #include <string.h>
10 #include <stdio.h>
11 #include <stdarg.h>
12 
17 #define string_unit
18 
19 #ifdef USE_UNICODE
20 #undef string_unit
21 #define string_unit uint8_t
22 
23 #error I have no idea how to implement unicode, but this library should be unicode-safe if you change string_unit
24 int utf8_strlen(const string_unit *str);
25 
29 #define _strlen(x) strlen(x)
30 #else
31 
32 #undef string_unit
33 #define string_unit char
34 
38 #define _strlen(x) strlen(x)
39 #endif
40 
58 typedef struct _string_real {
60  uint16_t len;
62  uint16_t tot;
64  unsigned char tmp;
66  unsigned char flg;
67  /* string itself follows... */
68 } string_real;
69 
72 
78 #define SR_MAGIC_NUMBER 1
79 
84 #define string_to_sr(x) ((string_real *)((unsigned char *)x - sizeof(string_real)))
85 
89 #define sr_to_string(x) ((string)((unsigned char *)x + sizeof(string_real)))
90 
94 #define is_sr(x) (((string_real *)((unsigned char *)x - sizeof(string_real)))->flg == SR_MAGIC_NUMBER)
95 
99 #define string_length(x) is_sr(x) ? string_to_sr(x)->len : _strlen(x)
100 
104 #define string_free(x) free(is_sr(x)?(void *)string_to_sr(x):(void *)x)
105 
106 string string_new();
107 string string_realloc(string a, uint16_t minS);
108 string string_copy(string a, const string b, uint16_t offset, uint16_t num);
109 string string_dup(const string a);
110 string string_temporary(string in);
111 string string_mknew(const string_unit *in);
112 string string_appendv(int count, ...);
113 
122 #define string_append(a, b) string_copy(a, b, string_length(a), 0)
123 
129 #define string_new_size(x) string_realloc(NULL, x)
130 
136 #define string_istemporary(x) (is_sr(x)?(string_to_sr(x)->tmp == 1):0)
137 
138 #endif
string string_mknew(const string_unit *in)
Definition: libstring.c:208
string string_dup(const string a)
Definition: libstring.c:167
Definition: libstring.h:58
string string_copy(string a, const string b, uint16_t offset, uint16_t num)
Definition: libstring.c:107
struct _string_real string_real
string string_appendv(int count,...)
Definition: libstring.c:228
uint16_t tot
Definition: libstring.h:62
string string_new()
Definition: libstring.c:31
string_unit * string
Definition: libstring.h:71
string string_realloc(string a, uint16_t minS)
Definition: libstring.c:57
#define string_unit
Definition: libstring.h:33
unsigned char flg
Definition: libstring.h:66
uint16_t len
Definition: libstring.h:60
string string_temporary(string in)
Definition: libstring.c:196
unsigned char tmp
Definition: libstring.h:64