Rename STRING_CONTRACT into internal macro STRINGI_CONTRACT

This commit is contained in:
Patrick Pelissier committed 2018-01-23 21:45:45 +01:00
1 parent ff6772aaa7
commit 4d41774345
2 files changed
+89 -89

No files matched your search

+88 -88
View File
@@ -43,7 +43,7 @@
// This macro defines the contract of a string. // This macro defines the contract of a string.
// Note: A ==> B is represented as not(A) or B // Note: A ==> B is represented as not(A) or B
// Note: use of strlen can slow down a lot the program in some cases. // Note: use of strlen can slow down a lot the program in some cases.
#define STRING_CONTRACT(v) do { \ #define STRINGI_CONTRACT(v) do { \
M_ASSUME (v != NULL); \ M_ASSUME (v != NULL); \
M_ASSUME (v->ptr != NULL || (v->size == 0 && v->alloc == 0)); \ M_ASSUME (v->ptr != NULL || (v->size == 0 && v->alloc == 0)); \
STRINGI_ASSUME (v->ptr == NULL || v->size == strlen(v->ptr)); \ STRINGI_ASSUME (v->ptr == NULL || v->size == strlen(v->ptr)); \
@@ -72,13 +72,13 @@ string_init(string_t v)
{ {
v->size = v->alloc = 0; v->size = v->alloc = 0;
v->ptr = NULL; v->ptr = NULL;
STRING_CONTRACT(v); STRINGI_CONTRACT(v);
} }
static inline void static inline void
string_clear(string_t v) string_clear(string_t v)
{ {
STRING_CONTRACT(v); STRINGI_CONTRACT(v);
M_MEMORY_FREE(v->ptr); M_MEMORY_FREE(v->ptr);
v->size = v->alloc = 0; v->size = v->alloc = 0;
v->ptr = NULL; v->ptr = NULL;
@@ -91,7 +91,7 @@ static inline void stringi_clear2(string_t *v) { string_clear(*v); }
static inline char * static inline char *
string_clear_get_str(string_t v) string_clear_get_str(string_t v)
{ {
STRING_CONTRACT(v); STRINGI_CONTRACT(v);
char *p = v->ptr; char *p = v->ptr;
v->size = v->alloc = 0; v->size = v->alloc = 0;
v->ptr = NULL; v->ptr = NULL;
@@ -101,31 +101,31 @@ string_clear_get_str(string_t v)
static inline void static inline void
string_clean(string_t v) string_clean(string_t v)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
v->size = 0; v->size = 0;
if (M_LIKELY (v->ptr)) if (M_LIKELY (v->ptr))
v->ptr[0] = 0; v->ptr[0] = 0;
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
} }
static inline size_t static inline size_t
string_size(const string_t v) string_size(const string_t v)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
return v->size; return v->size;
} }
static inline size_t static inline size_t
string_capacity(const string_t v) string_capacity(const string_t v)
{ {
STRING_CONTRACT(v); STRINGI_CONTRACT(v);
return v->alloc; return v->alloc;
} }
static inline char static inline char
string_get_char(const string_t v, size_t index) string_get_char(const string_t v, size_t index)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
M_ASSUME( v->ptr != NULL && index < v->size); M_ASSUME( v->ptr != NULL && index < v->size);
return v->ptr[index]; return v->ptr[index];
} }
@@ -133,7 +133,7 @@ string_get_char(const string_t v, size_t index)
static inline bool static inline bool
string_empty_p(const string_t v) string_empty_p(const string_t v)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
return v->size == 0; return v->size == 0;
} }
@@ -163,7 +163,7 @@ stringi_fit2size (string_t v, size_t size)
static inline void static inline void
string_reserve(string_t v, size_t alloc) string_reserve(string_t v, size_t alloc)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
/* NOTE: Reserve below needed size, perform a shrink to fit */ /* NOTE: Reserve below needed size, perform a shrink to fit */
if (v->size + 1 > alloc) { if (v->size + 1 > alloc) {
alloc = v->size+1; alloc = v->size+1;
@@ -183,25 +183,25 @@ string_reserve(string_t v, size_t alloc)
v->ptr = ptr; // Can be != ptr if v->ptr was NULL before. v->ptr = ptr; // Can be != ptr if v->ptr was NULL before.
v->alloc = alloc; v->alloc = alloc;
} }
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
} }
static inline void static inline void
string_set_str(string_t v, const char str[]) string_set_str(string_t v, const char str[])
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
M_ASSUME(str != NULL); M_ASSUME(str != NULL);
size_t size = strlen(str); size_t size = strlen(str);
stringi_fit2size(v, size+1); stringi_fit2size(v, size+1);
memcpy(v->ptr, str, size+1); memcpy(v->ptr, str, size+1);
v->size = size; v->size = size;
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
} }
static inline void static inline void
string_set_strn(string_t v, const char str[], size_t n) string_set_strn(string_t v, const char str[], size_t n)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
M_ASSUME(str != NULL); M_ASSUME(str != NULL);
size_t len = strlen(str); size_t len = strlen(str);
size_t size = M_MIN (len, n); size_t size = M_MIN (len, n);
@@ -209,21 +209,21 @@ string_set_strn(string_t v, const char str[], size_t n)
memcpy(v->ptr, str, size); memcpy(v->ptr, str, size);
v->ptr[size] = 0; v->ptr[size] = 0;
v->size = size; v->size = size;
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
} }
static inline const char* static inline const char*
string_get_cstr(const string_t v) string_get_cstr(const string_t v)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
return M_UNLIKELY (v->ptr == NULL) ? "" : v->ptr; return M_UNLIKELY (v->ptr == NULL) ? "" : v->ptr;
} }
static inline void static inline void
string_set (string_t v1, const string_t v2) string_set (string_t v1, const string_t v2)
{ {
STRING_CONTRACT (v1); STRINGI_CONTRACT (v1);
STRING_CONTRACT (v2); STRINGI_CONTRACT (v2);
if (M_LIKELY (v1 != v2)) { if (M_LIKELY (v1 != v2)) {
size_t size = v2->size; size_t size = v2->size;
stringi_fit2size(v1, size+1); stringi_fit2size(v1, size+1);
@@ -235,14 +235,14 @@ string_set (string_t v1, const string_t v2)
} }
v1->size = size; v1->size = size;
} }
STRING_CONTRACT (v1); STRINGI_CONTRACT (v1);
} }
static inline void static inline void
string_set_n(string_t v, const string_t ref, size_t offset, size_t length) string_set_n(string_t v, const string_t ref, size_t offset, size_t length)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
STRING_CONTRACT (ref); STRINGI_CONTRACT (ref);
assert (offset <= ref->size); assert (offset <= ref->size);
assert (v != ref); // Not supported yet assert (v != ref); // Not supported yet
if (M_UNLIKELY (ref->size == 0)) { if (M_UNLIKELY (ref->size == 0)) {
@@ -273,7 +273,7 @@ string_init_set_str(string_t v1, const char str[])
static inline void static inline void
string_init_move(string_t v1, string_t v2) string_init_move(string_t v1, string_t v2)
{ {
STRING_CONTRACT (v2); STRINGI_CONTRACT (v2);
v1->size = v2->size; v1->size = v2->size;
v1->alloc = v2->alloc; v1->alloc = v2->alloc;
v1->ptr = v2->ptr; v1->ptr = v2->ptr;
@@ -281,19 +281,19 @@ string_init_move(string_t v1, string_t v2)
v2->size = 0; v2->size = 0;
v2->alloc = 0; v2->alloc = 0;
v2->ptr = NULL; v2->ptr = NULL;
STRING_CONTRACT (v1); STRINGI_CONTRACT (v1);
} }
static inline void static inline void
string_swap(string_t v1, string_t v2) string_swap(string_t v1, string_t v2)
{ {
STRING_CONTRACT (v1); STRINGI_CONTRACT (v1);
STRING_CONTRACT (v2); STRINGI_CONTRACT (v2);
M_SWAP (size_t, v1->size, v2->size); M_SWAP (size_t, v1->size, v2->size);
M_SWAP (size_t, v1->alloc, v2->alloc); M_SWAP (size_t, v1->alloc, v2->alloc);
M_SWAP (char *, v1->ptr, v2->ptr); M_SWAP (char *, v1->ptr, v2->ptr);
STRING_CONTRACT (v1); STRINGI_CONTRACT (v1);
STRING_CONTRACT (v2); STRINGI_CONTRACT (v2);
} }
static inline void static inline void
@@ -306,30 +306,30 @@ string_move(string_t v1, string_t v2)
static inline void static inline void
string_push_back (string_t v, char c) string_push_back (string_t v, char c)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
stringi_fit2size(v, v->size+2); stringi_fit2size(v, v->size+2);
v->ptr[v->size++] = c; v->ptr[v->size++] = c;
v->ptr[v->size] = 0; v->ptr[v->size] = 0;
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
} }
static inline void static inline void
string_cat_str(string_t v, const char str[]) string_cat_str(string_t v, const char str[])
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
M_ASSUME (str != NULL); M_ASSUME (str != NULL);
const size_t size = strlen(str); const size_t size = strlen(str);
stringi_fit2size(v, v->size + size + 1); stringi_fit2size(v, v->size + size + 1);
memcpy(&v->ptr[v->size], str, size + 1); memcpy(&v->ptr[v->size], str, size + 1);
v->size += size; v->size += size;
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
} }
static inline void static inline void
string_cat(string_t v, const string_t v2) string_cat(string_t v, const string_t v2)
{ {
STRING_CONTRACT (v2); STRINGI_CONTRACT (v2);
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
const size_t size = v2->size; const size_t size = v2->size;
if (M_LIKELY (size > 0)) { if (M_LIKELY (size > 0)) {
stringi_fit2size(v, v->size + size + 1); stringi_fit2size(v, v->size + size + 1);
@@ -338,13 +338,13 @@ string_cat(string_t v, const string_t v2)
v->size += size; v->size += size;
v->ptr[v->size] = 0; v->ptr[v->size] = 0;
} }
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
} }
static inline int static inline int
string_cmp_str(const string_t v1, const char str[]) string_cmp_str(const string_t v1, const char str[])
{ {
STRING_CONTRACT (v1); STRINGI_CONTRACT (v1);
M_ASSUME (str != NULL); M_ASSUME (str != NULL);
return strcmp(string_get_cstr(v1), str); return strcmp(string_get_cstr(v1), str);
} }
@@ -352,15 +352,15 @@ string_cmp_str(const string_t v1, const char str[])
static inline int static inline int
string_cmp(const string_t v1, const string_t v2) string_cmp(const string_t v1, const string_t v2)
{ {
STRING_CONTRACT (v1); STRINGI_CONTRACT (v1);
STRING_CONTRACT (v2); STRINGI_CONTRACT (v2);
return strcmp(string_get_cstr(v1), string_get_cstr(v2)); return strcmp(string_get_cstr(v1), string_get_cstr(v2));
} }
static inline bool static inline bool
string_equal_str_p(const string_t v1, const char str[]) string_equal_str_p(const string_t v1, const char str[])
{ {
STRING_CONTRACT(v1); STRINGI_CONTRACT(v1);
M_ASSUME (str != NULL); M_ASSUME (str != NULL);
return string_cmp_str(v1, str) == 0; return string_cmp_str(v1, str) == 0;
} }
@@ -368,8 +368,8 @@ string_equal_str_p(const string_t v1, const char str[])
static inline bool static inline bool
string_equal_p(const string_t v1, const string_t v2) string_equal_p(const string_t v1, const string_t v2)
{ {
STRING_CONTRACT(v1); STRINGI_CONTRACT(v1);
STRING_CONTRACT(v2); STRINGI_CONTRACT(v2);
return v1->size == v2->size && string_cmp(v1, v2) == 0; return v1->size == v2->size && string_cmp(v1, v2) == 0;
} }
@@ -377,7 +377,7 @@ string_equal_p(const string_t v1, const string_t v2)
static inline int static inline int
string_cmpi_str(const string_t v1, const char p2[]) string_cmpi_str(const string_t v1, const char p2[])
{ {
STRING_CONTRACT (v1); STRINGI_CONTRACT (v1);
M_ASSUME (p2 != NULL); M_ASSUME (p2 != NULL);
// strcasecmp is POSIX // strcasecmp is POSIX
const char *p1 = string_get_cstr(v1); const char *p1 = string_get_cstr(v1);
@@ -399,7 +399,7 @@ string_cmpi(const string_t v1, const string_t v2)
static inline size_t static inline size_t
string_search_char (const string_t v, char c, size_t start) string_search_char (const string_t v, char c, size_t start)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
assert (start <= v->size); assert (start <= v->size);
const char *p = M_ASSIGN_CAST(const char*, const char *p = M_ASSIGN_CAST(const char*,
strchr(string_get_cstr(v)+start, c)); strchr(string_get_cstr(v)+start, c));
@@ -409,7 +409,7 @@ string_search_char (const string_t v, char c, size_t start)
static inline size_t static inline size_t
string_search_rchar (const string_t v, char c, size_t start) string_search_rchar (const string_t v, char c, size_t start)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
assert (start <= v->size); assert (start <= v->size);
// NOTE: Can implement it in a faster way than the libc function // NOTE: Can implement it in a faster way than the libc function
// by scanning backward from the bottom of the string (which is // by scanning backward from the bottom of the string (which is
@@ -422,7 +422,7 @@ string_search_rchar (const string_t v, char c, size_t start)
static inline size_t static inline size_t
string_search_str (const string_t v, const char str[], size_t start) string_search_str (const string_t v, const char str[], size_t start)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
assert (start <= v->size); assert (start <= v->size);
M_ASSUME (str != NULL); M_ASSUME (str != NULL);
const char *p = M_ASSIGN_CAST(const char*, const char *p = M_ASSIGN_CAST(const char*,
@@ -433,7 +433,7 @@ string_search_str (const string_t v, const char str[], size_t start)
static inline size_t static inline size_t
string_search (const string_t v1, const string_t v2, size_t start) string_search (const string_t v1, const string_t v2, size_t start)
{ {
STRING_CONTRACT (v2); STRINGI_CONTRACT (v2);
assert (start <= v1->size); assert (start <= v1->size);
return string_search_str(v1, string_get_cstr(v2), start); return string_search_str(v1, string_get_cstr(v2), start);
} }
@@ -441,7 +441,7 @@ string_search (const string_t v1, const string_t v2, size_t start)
static inline size_t static inline size_t
string_search_pbrk(const string_t v1, const char first_of[], size_t start) string_search_pbrk(const string_t v1, const char first_of[], size_t start)
{ {
STRING_CONTRACT (v1); STRINGI_CONTRACT (v1);
assert (start <= v1->size); assert (start <= v1->size);
M_ASSUME (first_of != NULL); M_ASSUME (first_of != NULL);
const char *p = M_ASSIGN_CAST(const char*, const char *p = M_ASSIGN_CAST(const char*,
@@ -452,21 +452,21 @@ string_search_pbrk(const string_t v1, const char first_of[], size_t start)
static inline int static inline int
string_strcoll_str(const string_t v, const char str[]) string_strcoll_str(const string_t v, const char str[])
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
return strcoll(string_get_cstr(v), str); return strcoll(string_get_cstr(v), str);
} }
static inline int static inline int
string_strcoll (const string_t v1, const string_t v2) string_strcoll (const string_t v1, const string_t v2)
{ {
STRING_CONTRACT (v2); STRINGI_CONTRACT (v2);
return string_strcoll_str(v1, string_get_cstr(v2)); return string_strcoll_str(v1, string_get_cstr(v2));
} }
static inline size_t static inline size_t
string_spn(const string_t v1, const char accept[]) string_spn(const string_t v1, const char accept[])
{ {
STRING_CONTRACT (v1); STRINGI_CONTRACT (v1);
M_ASSUME (accept != NULL); M_ASSUME (accept != NULL);
return strspn(string_get_cstr(v1), accept); return strspn(string_get_cstr(v1), accept);
} }
@@ -474,7 +474,7 @@ string_spn(const string_t v1, const char accept[])
static inline size_t static inline size_t
string_cspn(const string_t v1, const char accept[]) string_cspn(const string_t v1, const char accept[])
{ {
STRING_CONTRACT (v1); STRINGI_CONTRACT (v1);
M_ASSUME (accept != NULL); M_ASSUME (accept != NULL);
return strcspn(string_get_cstr(v1), accept); return strcspn(string_get_cstr(v1), accept);
} }
@@ -482,33 +482,33 @@ string_cspn(const string_t v1, const char accept[])
static inline void static inline void
string_left(string_t v, size_t index) string_left(string_t v, size_t index)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
if (index >= v->size) if (index >= v->size)
return; return;
M_ASSUME (v->ptr != NULL); M_ASSUME (v->ptr != NULL);
v->ptr[index] = 0; v->ptr[index] = 0;
v->size = index; v->size = index;
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
} }
// Note: this is an index, not the size to keep from the right ! // Note: this is an index, not the size to keep from the right !
static inline void static inline void
string_right(string_t v, size_t index) string_right(string_t v, size_t index)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
if (index >= v->size) { if (index >= v->size) {
if (v->ptr != NULL) { if (v->ptr != NULL) {
v->ptr[0] = 0; v->ptr[0] = 0;
v->size = 0; v->size = 0;
} }
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
return; return;
} }
M_ASSUME (v->ptr != NULL); M_ASSUME (v->ptr != NULL);
size_t s2 = v->size - index; size_t s2 = v->size - index;
memmove (&v->ptr[0], &v->ptr[index], s2+1); memmove (&v->ptr[0], &v->ptr[index], s2+1);
v->size = s2; v->size = s2;
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
} }
static inline void static inline void
@@ -521,7 +521,7 @@ string_mid (string_t v, size_t index, size_t size)
static inline size_t static inline size_t
string_replace_str (string_t v, const char str1[], const char str2[], size_t start) string_replace_str (string_t v, const char str1[], const char str2[], size_t start)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
M_ASSUME (str1 != NULL && str2 != NULL); M_ASSUME (str1 != NULL && str2 != NULL);
size_t i = string_search_str(v, str1, start); size_t i = string_search_str(v, str1, start);
if (i != STRING_FAILURE) { if (i != STRING_FAILURE) {
@@ -532,7 +532,7 @@ string_replace_str (string_t v, const char str1[], const char str2[], size_t sta
memmove(&v->ptr[i+str2_l], &v->ptr[i+str1_l], v->size - i - str1_l + 1); memmove(&v->ptr[i+str2_l], &v->ptr[i+str1_l], v->size - i - str1_l + 1);
memcpy (&v->ptr[i], str2, str2_l); memcpy (&v->ptr[i], str2, str2_l);
v->size += str2_l - str1_l; v->size += str2_l - str1_l;
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
} }
return i; return i;
} }
@@ -540,16 +540,16 @@ string_replace_str (string_t v, const char str1[], const char str2[], size_t sta
static inline size_t static inline size_t
string_replace (string_t v, const string_t v1, const string_t v2, size_t start) string_replace (string_t v, const string_t v1, const string_t v2, size_t start)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
STRING_CONTRACT (v1); STRINGI_CONTRACT (v1);
STRING_CONTRACT (v2); STRINGI_CONTRACT (v2);
return string_replace_str(v, string_get_cstr(v1), string_get_cstr(v2), start); return string_replace_str(v, string_get_cstr(v1), string_get_cstr(v2), start);
} }
static inline void static inline void
string_replace_at (string_t v, size_t pos, size_t len, const char str2[]) string_replace_at (string_t v, size_t pos, size_t len, const char str2[])
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
M_ASSUME (pos+len < v->size && str2 != NULL); M_ASSUME (pos+len < v->size && str2 != NULL);
const size_t str1_l = len; const size_t str1_l = len;
const size_t str2_l = strlen(str2); const size_t str2_l = strlen(str2);
@@ -558,13 +558,13 @@ string_replace_at (string_t v, size_t pos, size_t len, const char str2[])
memmove(&v->ptr[pos+str2_l], &v->ptr[pos+str1_l], v->size - pos - str1_l + 1); memmove(&v->ptr[pos+str2_l], &v->ptr[pos+str1_l], v->size - pos - str1_l + 1);
memcpy (&v->ptr[pos], str2, str2_l); memcpy (&v->ptr[pos], str2, str2_l);
v->size += str2_l - str1_l; v->size += str2_l - str1_l;
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
} }
static inline int static inline int
string_printf (string_t v, const char format[], ...) string_printf (string_t v, const char format[], ...)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
M_ASSUME (format != NULL); M_ASSUME (format != NULL);
va_list args; va_list args;
int size; int size;
@@ -583,14 +583,14 @@ string_printf (string_t v, const char format[], ...)
v->size = (size_t) size; v->size = (size_t) size;
} }
va_end (args); va_end (args);
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
return size; return size;
} }
static inline int static inline int
string_cat_printf (string_t v, const char format[], ...) string_cat_printf (string_t v, const char format[], ...)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
M_ASSUME (format != NULL); M_ASSUME (format != NULL);
va_list args; va_list args;
int size; int size;
@@ -608,14 +608,14 @@ string_cat_printf (string_t v, const char format[], ...)
v->size += (size_t) size; v->size += (size_t) size;
} }
va_end (args); va_end (args);
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
return size; return size;
} }
static inline bool static inline bool
string_fgets(string_t v, FILE *f, string_fgets_t arg) string_fgets(string_t v, FILE *f, string_fgets_t arg)
{ {
STRING_CONTRACT(v); STRINGI_CONTRACT(v);
stringi_fit2size (v, 100); stringi_fit2size (v, 100);
M_ASSUME(v->ptr != NULL); M_ASSUME(v->ptr != NULL);
v->size = 0; v->size = 0;
@@ -624,13 +624,13 @@ string_fgets(string_t v, FILE *f, string_fgets_t arg)
while (fgets(&v->ptr[v->size], v->alloc - v->size, f) != NULL) { while (fgets(&v->ptr[v->size], v->alloc - v->size, f) != NULL) {
retcode = true; /* Something has been read */ retcode = true; /* Something has been read */
v->size += strlen(&v->ptr[v->size]); v->size += strlen(&v->ptr[v->size]);
STRING_CONTRACT(v); STRINGI_CONTRACT(v);
if (arg != STRING_READ_FILE && v->ptr[v->size-1] == '\n') { if (arg != STRING_READ_FILE && v->ptr[v->size-1] == '\n') {
if (arg == STRING_READ_PURE_LINE) { if (arg == STRING_READ_PURE_LINE) {
v->size --; v->size --;
v->ptr[v->size] = 0; /* Remove EOL */ v->ptr[v->size] = 0; /* Remove EOL */
} }
STRING_CONTRACT(v); STRINGI_CONTRACT(v);
return retcode; /* Normal terminaison */ return retcode; /* Normal terminaison */
} else if (v->ptr[v->size-1] != '\n' && !feof(f)) { } else if (v->ptr[v->size-1] != '\n' && !feof(f)) {
/* The string buffer is not big enough: /* The string buffer is not big enough:
@@ -638,7 +638,7 @@ string_fgets(string_t v, FILE *f, string_fgets_t arg)
stringi_fit2size (v, v->alloc + v->alloc/2); stringi_fit2size (v, v->alloc + v->alloc/2);
} }
} }
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
return retcode; /* Abnormal terminaison */ return retcode; /* Abnormal terminaison */
} }
@@ -647,7 +647,7 @@ string_fget_word (string_t v, const char separator[], FILE *f)
{ {
char buffer[128]; char buffer[128];
char c = 0; char c = 0;
STRING_CONTRACT(v); STRINGI_CONTRACT(v);
assert (1+20+2+strlen(separator)+3 < sizeof buffer); assert (1+20+2+strlen(separator)+3 < sizeof buffer);
stringi_fit2size (v, 10); stringi_fit2size (v, 10);
v->size = 0; v->size = 0;
@@ -666,7 +666,7 @@ string_fget_word (string_t v, const char separator[], FILE *f)
&& fscanf(f, buffer, &v->ptr[v->size], &c) == 2) { && fscanf(f, buffer, &v->ptr[v->size], &c) == 2) {
retcode = true; retcode = true;
v->size += strlen(&v->ptr[v->size]); v->size += strlen(&v->ptr[v->size]);
STRING_CONTRACT(v); STRINGI_CONTRACT(v);
if (strchr(separator, c) != NULL) if (strchr(separator, c) != NULL)
return retcode; return retcode;
/* Next char is not a separator: continue parsing */ /* Next char is not a separator: continue parsing */
@@ -681,14 +681,14 @@ string_fget_word (string_t v, const char separator[], FILE *f)
static inline void static inline void
string_fputs(FILE *f, const string_t v) string_fputs(FILE *f, const string_t v)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
fputs(string_get_cstr(v), f); fputs(string_get_cstr(v), f);
} }
static inline bool static inline bool
string_start_with_str_p(const string_t v, const char str[]) string_start_with_str_p(const string_t v, const char str[])
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
M_ASSUME (str != NULL); M_ASSUME (str != NULL);
const char *v_str = string_get_cstr(v); const char *v_str = string_get_cstr(v);
while (*str){ while (*str){
@@ -703,21 +703,21 @@ string_start_with_str_p(const string_t v, const char str[])
static inline bool static inline bool
string_start_with_string_p(const string_t v, const string_t v2) string_start_with_string_p(const string_t v, const string_t v2)
{ {
STRING_CONTRACT (v2); STRINGI_CONTRACT (v2);
return string_start_with_str_p (v, string_get_cstr(v2)); return string_start_with_str_p (v, string_get_cstr(v2));
} }
static inline size_t static inline size_t
string_hash(const string_t v) string_hash(const string_t v)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
return m_core_hash(v->ptr, v->size); return m_core_hash(v->ptr, v->size);
} }
static inline void static inline void
string_strim(string_t v) string_strim(string_t v)
{ {
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
char *b = v->ptr; char *b = v->ptr;
size_t size = v->size; size_t size = v->size;
while (size > 0 && (b[size-1] == ' ' || b[size-1] == '\n' || b[size-1] == '\r' || b[size-1] == '\t')) while (size > 0 && (b[size-1] == ' ' || b[size-1] == '\n' || b[size-1] == '\r' || b[size-1] == '\t'))
@@ -734,7 +734,7 @@ string_strim(string_t v)
memmove (v->ptr, b, size); memmove (v->ptr, b, size);
v->ptr[size] = 0; v->ptr[size] = 0;
v->size = size; v->size = size;
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
} }
/* I/O */ /* I/O */
@@ -743,8 +743,8 @@ string_get_str(string_t v, const string_t v2, bool append)
{ {
/* Output: "string" with quote around /* Output: "string" with quote around
Replace " by \" within the string */ Replace " by \" within the string */
STRING_CONTRACT(v2); STRINGI_CONTRACT(v2);
STRING_CONTRACT(v); STRINGI_CONTRACT(v);
M_ASSUME (v != v2); // Limitation M_ASSUME (v != v2); // Limitation
if(append==false) v->size = 0; if(append==false) v->size = 0;
size_t targetSize = v->size + v2->size + 3; size_t targetSize = v->size + v2->size + 3;
@@ -762,7 +762,7 @@ string_get_str(string_t v, const string_t v2, bool append)
v->ptr[v->size ++] = '"'; v->ptr[v->size ++] = '"';
v->ptr[v->size] = 0; v->ptr[v->size] = 0;
M_ASSUME (v->size <= targetSize); M_ASSUME (v->size <= targetSize);
STRING_CONTRACT (v); STRINGI_CONTRACT (v);
} }
static inline void static inline void
@@ -770,7 +770,7 @@ string_out_str(FILE *f, const string_t v)
{ {
/* Output: "string" with quote around /* Output: "string" with quote around
Replace " by \" within the string */ Replace " by \" within the string */
STRING_CONTRACT(v); STRINGI_CONTRACT(v);
M_ASSUME (f != NULL); M_ASSUME (f != NULL);
fputc('"', f); fputc('"', f);
for(size_t i = 0 ; i < v->size; i++) { for(size_t i = 0 ; i < v->size; i++) {
@@ -786,7 +786,7 @@ string_out_str(FILE *f, const string_t v)
static inline bool static inline bool
string_in_str(string_t v, FILE *f) string_in_str(string_t v, FILE *f)
{ {
STRING_CONTRACT(v); STRINGI_CONTRACT(v);
M_ASSUME (f != NULL); M_ASSUME (f != NULL);
int c = fgetc(f); int c = fgetc(f);
if (c != '"') return false; if (c != '"') return false;
@@ -929,7 +929,7 @@ typedef struct {
static inline void static inline void
string_it(string_it_t it, const string_t str) string_it(string_it_t it, const string_t str)
{ {
STRING_CONTRACT(str); STRINGI_CONTRACT(str);
assert(it != NULL); assert(it != NULL);
it->ptr = str->ptr; it->ptr = str->ptr;
it->next_ptr = str->ptr; it->next_ptr = str->ptr;
@@ -972,7 +972,7 @@ string_get_cref (const string_it_t it)
static inline void static inline void
string_push_u (string_t str, string_unicode_t u) string_push_u (string_t str, string_unicode_t u)
{ {
STRING_CONTRACT(str); STRINGI_CONTRACT(str);
char buffer[4+1]; char buffer[4+1];
stringi_utf8_encode(buffer, u); stringi_utf8_encode(buffer, u);
string_cat_str(str, buffer); string_cat_str(str, buffer);
@@ -982,7 +982,7 @@ string_push_u (string_t str, string_unicode_t u)
static inline size_t static inline size_t
string_length_u(string_t str) string_length_u(string_t str)
{ {
STRING_CONTRACT(str); STRINGI_CONTRACT(str);
return stringi_utf8_length(string_get_cstr(str)); return stringi_utf8_length(string_get_cstr(str));
} }
@@ -990,7 +990,7 @@ string_length_u(string_t str)
static inline bool static inline bool
string_utf8_p(string_t str) string_utf8_p(string_t str)
{ {
STRING_CONTRACT(str); STRINGI_CONTRACT(str);
return stringi_utf8_valid_str_p(string_get_cstr(str)); return stringi_utf8_valid_str_p(string_get_cstr(str));
} }
+1 -1
View File
@@ -49,7 +49,7 @@
#undef M_UNLIKELY #undef M_UNLIKELY
#undef M_MEMORY_FULL #undef M_MEMORY_FULL
#undef M_SWAP #undef M_SWAP
#undef STRING_CONTRACT #undef STRINGI_CONTRACT
#undef ARRAYI_CONTRACT #undef ARRAYI_CONTRACT
#undef LIST_CONTRACT #undef LIST_CONTRACT
#undef DICTI_CONTRACT #undef DICTI_CONTRACT