Refactor code

This commit is contained in:
Patrick Pelissier committed 2019-04-20 12:33:08 +02:00
1 parent 67a7a4762a
commit cc61840ae8
1 file changed
+14 -9
+14 -9
View File
@@ -97,12 +97,14 @@ typedef enum string_fgets_s {
static inline bool static inline bool
string_int_stack_p(const string_t s) string_int_stack_p(const string_t s)
{ {
// Function can be called when contract is not fullfilled
return (s->ptr == &s->u.stack.buffer[0]); return (s->ptr == &s->u.stack.buffer[0]);
} }
static inline void static inline void
string_int_set_size(string_t s, size_t size) string_int_set_size(string_t s, size_t size)
{ {
// Function can be called when contract is not fullfilled
if (string_int_stack_p(s)) { if (string_int_stack_p(s)) {
assert (size < sizeof (str_heap_t) - 1); assert (size < sizeof (str_heap_t) - 1);
s->u.stack.buffer[sizeof (str_heap_t) - 1] = size; s->u.stack.buffer[sizeof (str_heap_t) - 1] = size;
@@ -113,6 +115,7 @@ string_int_set_size(string_t s, size_t size)
static inline size_t static inline size_t
string_size(const string_t s) string_size(const string_t s)
{ {
// Function can be called when contract is not fullfilled
const size_t s_stack = s->u.stack.buffer[sizeof (str_heap_t) - 1]; const size_t s_stack = s->u.stack.buffer[sizeof (str_heap_t) - 1];
const size_t s_heap = s->u.heap.size; const size_t s_heap = s->u.heap.size;
return string_int_stack_p(s) ? s_stack : s_heap; return string_int_stack_p(s) ? s_stack : s_heap;
@@ -121,6 +124,7 @@ string_size(const string_t s)
static inline size_t static inline size_t
string_capacity(const string_t s) string_capacity(const string_t s)
{ {
// Function can be called when contract is not fullfilled
const size_t c_stack = sizeof (str_heap_t) - 1; const size_t c_stack = sizeof (str_heap_t) - 1;
const size_t c_heap = s->u.heap.alloc; const size_t c_heap = s->u.heap.alloc;
return string_int_stack_p(s) ? c_stack : c_heap; return string_int_stack_p(s) ? c_stack : c_heap;
@@ -129,7 +133,7 @@ string_capacity(const string_t s)
static inline char* static inline char*
stringi_get_str(const string_t v) stringi_get_str(const string_t v)
{ {
STRINGI_CONTRACT (v); // Function can be called when contract is not fullfilled
return v->ptr; return v->ptr;
} }
@@ -189,7 +193,7 @@ string_clean(string_t v)
{ {
STRINGI_CONTRACT (v); STRINGI_CONTRACT (v);
string_int_set_size(v, 0); string_int_set_size(v, 0);
v->ptr[0] = 0; stringi_get_str(v)[0] = 0;
STRINGI_CONTRACT (v); STRINGI_CONTRACT (v);
} }
@@ -578,8 +582,7 @@ string_left(string_t v, size_t index)
const size_t size = string_size(v); const size_t size = string_size(v);
if (index >= size) if (index >= size)
return; return;
M_ASSUME (v->ptr != NULL); stringi_get_str(v)[index] = 0;
v->ptr[index] = 0;
string_int_set_size(v,index); string_int_set_size(v,index);
STRINGI_CONTRACT (v); STRINGI_CONTRACT (v);
} }
@@ -589,15 +592,16 @@ static inline void
string_right(string_t v, size_t index) string_right(string_t v, size_t index)
{ {
STRINGI_CONTRACT (v); STRINGI_CONTRACT (v);
char *ptr = stringi_get_str(v);
const size_t size = string_size(v); const size_t size = string_size(v);
if (index >= size) { if (index >= size) {
v->ptr[0] = 0; ptr[0] = 0;
string_int_set_size(v, 0); string_int_set_size(v, 0);
STRINGI_CONTRACT (v); STRINGI_CONTRACT (v);
return; return;
} }
size_t s2 = size - index; size_t s2 = size - index;
memmove (&v->ptr[0], &v->ptr[index], s2+1); memmove (&ptr[0], &ptr[index], s2+1);
string_int_set_size(v, s2); string_int_set_size(v, s2);
STRINGI_CONTRACT (v); STRINGI_CONTRACT (v);
} }
@@ -664,12 +668,13 @@ string_printf (string_t v, const char format[], ...)
M_ASSUME (format != NULL); M_ASSUME (format != NULL);
va_list args; va_list args;
int size; int size;
char *ptr = stringi_get_str(v);
size_t alloc = string_capacity(v); size_t alloc = string_capacity(v);
va_start (args, format); va_start (args, format);
size = vsnprintf (v->ptr, alloc, format, args); size = vsnprintf (ptr, alloc, format, args);
if (size > 0 && ((size_t) size+1 >= alloc) ) { if (size > 0 && ((size_t) size+1 >= alloc) ) {
// We have to realloc our string to fit the needed size // We have to realloc our string to fit the needed size
char *ptr = stringi_fit2size (v, (size_t) size + 1); ptr = stringi_fit2size (v, (size_t) size + 1);
alloc = string_capacity(v); alloc = string_capacity(v);
// and redo the parsing. // and redo the parsing.
va_end (args); va_end (args);
@@ -954,7 +959,7 @@ string_out_str(FILE *f, const string_t v)
fputc('"', f); fputc('"', f);
size_t size = string_size(v); size_t size = string_size(v);
for(size_t i = 0 ; i < size; i++) { for(size_t i = 0 ; i < size; i++) {
const char c = v->ptr[i]; const char c = string_get_char(v, i);
switch (c) { switch (c) {
case '\\': case '\\':
case '"': case '"':