Update m_serial_ll_ct to have more basic types.

This commit is contained in:
Patrick Pelissier committed 2021-03-28 11:09:59 +02:00
1 parent 60cfc63c4e
commit 052989a5a2
2 files changed
+32 -24

No files matched your search

+14 -6
View File
@@ -3575,17 +3575,25 @@ inline m_serial_return_code_t operator&(m_serial_return_code_t a, m_serial_retur
/* Different types of types that can be stored in a serial object to represent it: /* Different types of types that can be stored in a serial object to represent it:
* a boolean * a boolean
* an integer * different kind of integers
* different kind of floats
* a size * a size
* a pointer to something. * a pointer to something.
* a serial return code * a serial return code
*/ */
typedef union m_serial_ll_u { typedef union m_serial_ll_u {
bool b; bool b;
int i; char c;
size_t s; int i;
void *p; long l;
const char *c; long long ll;
float f;
double d;
long double e;
size_t s;
uintptr_t u;
void *p;
const char *cstr;
m_serial_return_code_t r; m_serial_return_code_t r;
} m_serial_ll_ct; } m_serial_ll_ct;
+18 -18
View File
@@ -879,7 +879,7 @@ m_serial_str_json_gets(size_t alloc, char field[], const char reject[], const ch
Return M_SERIAL_OK_DONE if it succeeds, M_SERIAL_FAIL otherwise */ Return M_SERIAL_OK_DONE if it succeeds, M_SERIAL_FAIL otherwise */
static inline m_serial_return_code_t static inline m_serial_return_code_t
m_serial_str_json_read_boolean(m_serial_read_t serial, bool *b){ m_serial_str_json_read_boolean(m_serial_read_t serial, bool *b){
const char **f = &serial->data[0].c; const char **f = &serial->data[0].cstr;
m_serial_str_json_skip(f); m_serial_str_json_skip(f);
char c = m_serial_str_json_getc(f); char c = m_serial_str_json_getc(f);
if (c == 't') { if (c == 't') {
@@ -913,11 +913,11 @@ m_serial_str_json_read_boolean(m_serial_read_t serial, bool *b){
static inline m_serial_return_code_t static inline m_serial_return_code_t
m_serial_str_json_read_integer(m_serial_read_t serial, long long *i, const size_t size_of_type){ m_serial_str_json_read_integer(m_serial_read_t serial, long long *i, const size_t size_of_type){
(void) size_of_type; // Ignored (void) size_of_type; // Ignored
const char **f = &serial->data[0].c; const char **f = &serial->data[0].cstr;
char *e; char *e;
*i = strtoll(*f, &e, 10); *i = strtoll(*f, &e, 10);
bool b = e != *f; bool b = e != *f;
serial->data[0].c = (const char*) e; serial->data[0].cstr = (const char*) e;
return b ? M_SERIAL_OK_DONE : m_core_serial_fail(); return b ? M_SERIAL_OK_DONE : m_core_serial_fail();
} }
@@ -927,11 +927,11 @@ m_serial_str_json_read_integer(m_serial_read_t serial, long long *i, const size_
static inline m_serial_return_code_t static inline m_serial_return_code_t
m_serial_str_json_read_float(m_serial_read_t serial, long double *r, const size_t size_of_type){ m_serial_str_json_read_float(m_serial_read_t serial, long double *r, const size_t size_of_type){
(void) size_of_type; // Ignored (void) size_of_type; // Ignored
const char **f = &serial->data[0].c; const char **f = &serial->data[0].cstr;
char *e; char *e;
*r = strtold(*f, &e); *r = strtold(*f, &e);
bool b = e != *f; bool b = e != *f;
serial->data[0].c = (const char*) e; serial->data[0].cstr = (const char*) e;
return b ? M_SERIAL_OK_DONE : m_core_serial_fail(); return b ? M_SERIAL_OK_DONE : m_core_serial_fail();
} }
@@ -940,11 +940,11 @@ m_serial_str_json_read_float(m_serial_read_t serial, long double *r, const size_
Return M_SERIAL_OK_DONE if it succeeds, M_SERIAL_FAIL otherwise */ Return M_SERIAL_OK_DONE if it succeeds, M_SERIAL_FAIL otherwise */
static inline m_serial_return_code_t static inline m_serial_return_code_t
m_serial_str_json_read_string(m_serial_read_t serial, struct string_s *s){ m_serial_str_json_read_string(m_serial_read_t serial, struct string_s *s){
const char **f = &serial->data[0].c; const char **f = &serial->data[0].cstr;
m_serial_str_json_skip(f); m_serial_str_json_skip(f);
const char *e; const char *e;
bool b = string_parse_str(s, *f, &e); bool b = string_parse_str(s, *f, &e);
serial->data[0].c = e; serial->data[0].cstr = e;
return b ? M_SERIAL_OK_DONE : m_core_serial_fail(); return b ? M_SERIAL_OK_DONE : m_core_serial_fail();
} }
@@ -959,7 +959,7 @@ static inline m_serial_return_code_t
m_serial_str_json_read_array_start(m_serial_local_t local, m_serial_read_t serial, size_t *num) m_serial_str_json_read_array_start(m_serial_local_t local, m_serial_read_t serial, size_t *num)
{ {
(void) local; // argument not used (void) local; // argument not used
const char **f = &serial->data[0].c; const char **f = &serial->data[0].cstr;
m_serial_str_json_skip(f); m_serial_str_json_skip(f);
char c = m_serial_str_json_getc(f); char c = m_serial_str_json_getc(f);
if (M_UNLIKELY(c != '[')) { if (M_UNLIKELY(c != '[')) {
@@ -983,7 +983,7 @@ static inline m_serial_return_code_t
m_serial_str_json_read_array_next(m_serial_local_t local, m_serial_read_t serial) m_serial_str_json_read_array_next(m_serial_local_t local, m_serial_read_t serial)
{ {
(void) local; // argument not used (void) local; // argument not used
const char **f = &serial->data[0].c; const char **f = &serial->data[0].cstr;
m_serial_str_json_skip(f); m_serial_str_json_skip(f);
char c = m_serial_str_json_getc(f); char c = m_serial_str_json_getc(f);
return c == ',' ? M_SERIAL_OK_CONTINUE : c == ']' ? M_SERIAL_OK_DONE : m_core_serial_fail(); return c == ',' ? M_SERIAL_OK_CONTINUE : c == ']' ? M_SERIAL_OK_DONE : m_core_serial_fail();
@@ -1000,7 +1000,7 @@ static inline m_serial_return_code_t
m_serial_str_json_read_map_start(m_serial_local_t local, m_serial_read_t serial, size_t *num) m_serial_str_json_read_map_start(m_serial_local_t local, m_serial_read_t serial, size_t *num)
{ {
(void) local; // argument not used (void) local; // argument not used
const char **f = &serial->data[0].c; const char **f = &serial->data[0].cstr;
m_serial_str_json_skip(f); m_serial_str_json_skip(f);
char c = m_serial_str_json_getc(f); char c = m_serial_str_json_getc(f);
if (M_UNLIKELY(c != '{')) { if (M_UNLIKELY(c != '{')) {
@@ -1023,7 +1023,7 @@ static inline m_serial_return_code_t
m_serial_str_json_read_map_value(m_serial_local_t local, m_serial_read_t serial) m_serial_str_json_read_map_value(m_serial_local_t local, m_serial_read_t serial)
{ {
(void) local; // argument not used (void) local; // argument not used
const char **f = &serial->data[0].c; const char **f = &serial->data[0].cstr;
m_serial_str_json_skip(f); m_serial_str_json_skip(f);
char c = m_serial_str_json_getc(f); char c = m_serial_str_json_getc(f);
return c ==':' ? M_SERIAL_OK_CONTINUE : m_core_serial_fail(); return c ==':' ? M_SERIAL_OK_CONTINUE : m_core_serial_fail();
@@ -1037,7 +1037,7 @@ static inline m_serial_return_code_t
m_serial_str_json_read_map_next(m_serial_local_t local, m_serial_read_t serial) m_serial_str_json_read_map_next(m_serial_local_t local, m_serial_read_t serial)
{ {
(void) local; // argument not used (void) local; // argument not used
const char **f = &serial->data[0].c; const char **f = &serial->data[0].cstr;
m_serial_str_json_skip(f); m_serial_str_json_skip(f);
char c = m_serial_str_json_getc(f); char c = m_serial_str_json_getc(f);
return c == ',' ? M_SERIAL_OK_CONTINUE : c == '}' ? M_SERIAL_OK_DONE : m_core_serial_fail(); return c == ',' ? M_SERIAL_OK_CONTINUE : c == '}' ? M_SERIAL_OK_DONE : m_core_serial_fail();
@@ -1050,7 +1050,7 @@ static inline m_serial_return_code_t
m_serial_str_json_read_tuple_start(m_serial_local_t local, m_serial_read_t serial) m_serial_str_json_read_tuple_start(m_serial_local_t local, m_serial_read_t serial)
{ {
(void) local; // argument not used (void) local; // argument not used
const char **f = &serial->data[0].c; const char **f = &serial->data[0].cstr;
m_serial_str_json_skip(f); m_serial_str_json_skip(f);
char c = m_serial_str_json_getc(f); char c = m_serial_str_json_getc(f);
return c == '{' ? M_SERIAL_OK_CONTINUE : m_core_serial_fail(); return c == '{' ? M_SERIAL_OK_CONTINUE : m_core_serial_fail();
@@ -1066,7 +1066,7 @@ static inline m_serial_return_code_t
m_serial_str_json_read_tuple_id(m_serial_local_t local, m_serial_read_t serial, const char *const field_name [], const int max, int *id) m_serial_str_json_read_tuple_id(m_serial_local_t local, m_serial_read_t serial, const char *const field_name [], const int max, int *id)
{ {
(void) local; // argument not used (void) local; // argument not used
const char **f = &serial->data[0].c; const char **f = &serial->data[0].cstr;
m_serial_str_json_skip(f); m_serial_str_json_skip(f);
char c = m_serial_str_json_getc(f); char c = m_serial_str_json_getc(f);
if (c == 0) return m_core_serial_fail(); if (c == 0) return m_core_serial_fail();
@@ -1107,7 +1107,7 @@ static inline m_serial_return_code_t
m_serial_str_json_read_variant_start(m_serial_local_t local, m_serial_read_t serial, const char *const field_name[], const int max, int*id) m_serial_str_json_read_variant_start(m_serial_local_t local, m_serial_read_t serial, const char *const field_name[], const int max, int*id)
{ {
(void) local; // argument not used (void) local; // argument not used
const char **f = &serial->data[0].c; const char **f = &serial->data[0].cstr;
m_serial_str_json_skip(f); m_serial_str_json_skip(f);
int c = m_serial_str_json_getc(f); int c = m_serial_str_json_getc(f);
if (M_UNLIKELY (c != '{')) if (M_UNLIKELY (c != '{'))
@@ -1144,7 +1144,7 @@ static inline m_serial_return_code_t
m_serial_str_json_read_variant_end(m_serial_local_t local, m_serial_read_t serial) m_serial_str_json_read_variant_end(m_serial_local_t local, m_serial_read_t serial)
{ {
(void) local; // argument not used (void) local; // argument not used
const char **f = &serial->data[0].c; const char **f = &serial->data[0].cstr;
m_serial_str_json_skip(f); m_serial_str_json_skip(f);
int c = m_serial_str_json_getc(f); int c = m_serial_str_json_getc(f);
return (M_UNLIKELY (c != '}')) ? m_core_serial_fail() : M_SERIAL_OK_DONE; return (M_UNLIKELY (c != '}')) ? m_core_serial_fail() : M_SERIAL_OK_DONE;
@@ -1170,14 +1170,14 @@ static const m_serial_read_interface_t m_serial_str_json_read_interface = {
static inline void m_serial_str_json_read_init(m_serial_read_t serial, const char str[]) static inline void m_serial_str_json_read_init(m_serial_read_t serial, const char str[])
{ {
serial->m_interface = &m_serial_str_json_read_interface; serial->m_interface = &m_serial_str_json_read_interface;
serial->data[0].c = str; serial->data[0].cstr = str;
} }
/* Clear the JSON serial object for reading from the FILE */ /* Clear the JSON serial object for reading from the FILE */
static inline const char *m_serial_str_json_read_clear(m_serial_read_t serial) static inline const char *m_serial_str_json_read_clear(m_serial_read_t serial)
{ {
// Nothing to clear. Return pointer to the last data parsed. // Nothing to clear. Return pointer to the last data parsed.
return serial->data[0].c; return serial->data[0].cstr;
} }
/* Define a synonym of m_serial_read_t /* Define a synonym of m_serial_read_t