gmio_core/internal: fix constness in API of string_parse.h
This commit is contained in:
parent
100af32b21
commit
e27d79b2e3
@ -21,22 +21,22 @@
|
||||
|
||||
void gmio_string_stream_fwd_iterator_init(gmio_string_stream_fwd_iterator_t *it)
|
||||
{
|
||||
/* Trick: declaring the buffer exhausted will actually trigger the first call to
|
||||
* gmio_stream_read() inside gmio_next_char()
|
||||
/* Trick: declaring the buffer exhausted will actually trigger the first
|
||||
* call to gmio_stream_read() inside gmio_next_char()
|
||||
*/
|
||||
it->buffer.len = 0;
|
||||
it->buffer_pos = it->buffer.max_len;
|
||||
gmio_next_char(it);
|
||||
}
|
||||
|
||||
char *gmio_current_char(const gmio_string_stream_fwd_iterator_t *it)
|
||||
const char *gmio_current_char(const gmio_string_stream_fwd_iterator_t *it)
|
||||
{
|
||||
if (it != NULL && it->buffer_pos < it->buffer.len)
|
||||
return it->buffer.ptr + it->buffer_pos;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *gmio_next_char(gmio_string_stream_fwd_iterator_t *it)
|
||||
const char *gmio_next_char(gmio_string_stream_fwd_iterator_t *it)
|
||||
{
|
||||
if (it == NULL)
|
||||
return NULL;
|
||||
@ -51,7 +51,9 @@ char *gmio_next_char(gmio_string_stream_fwd_iterator_t *it)
|
||||
|
||||
/* Read next chunk of data */
|
||||
it->buffer_pos = 0;
|
||||
it->buffer.len = gmio_stream_read(it->stream, it->buffer.ptr, sizeof(char), it->buffer.max_len);
|
||||
it->buffer.len = gmio_stream_read(it->stream,
|
||||
it->buffer.ptr,
|
||||
sizeof(char), it->buffer.max_len);
|
||||
if (gmio_stream_error(it->stream) == 0) {
|
||||
if (it->stream_read_hook != NULL)
|
||||
it->stream_read_hook(it->cookie, &it->buffer);
|
||||
|
@ -41,10 +41,13 @@ struct gmio_string_stream_fwd_iterator
|
||||
typedef struct gmio_string_stream_fwd_iterator gmio_string_stream_fwd_iterator_t;
|
||||
|
||||
void gmio_string_stream_fwd_iterator_init(gmio_string_stream_fwd_iterator_t* it);
|
||||
char* gmio_current_char(const gmio_string_stream_fwd_iterator_t* it);
|
||||
const char* gmio_current_char(const gmio_string_stream_fwd_iterator_t* it);
|
||||
void gmio_skip_spaces(gmio_string_stream_fwd_iterator_t* it);
|
||||
int gmio_eat_word(gmio_string_stream_fwd_iterator_t* it, gmio_string_buffer_t* buffer);
|
||||
|
||||
const char* gmio_next_char(gmio_string_stream_fwd_iterator_t* it);
|
||||
gmio_bool_t gmio_checked_next_chars(gmio_string_stream_fwd_iterator_t* it, const char* str);
|
||||
|
||||
/*! Converts the string pointed to by \p str to gmio_float32_t representation
|
||||
*
|
||||
* \retval 0 On success
|
||||
@ -52,7 +55,4 @@ int gmio_eat_word(gmio_string_stream_fwd_iterator_t* it, gmio_string_buffer_t*
|
||||
*/
|
||||
int gmio_get_float32(const char* str, gmio_float32_t* value_ptr);
|
||||
|
||||
char* gmio_next_char(gmio_string_stream_fwd_iterator_t* it);
|
||||
gmio_bool_t gmio_checked_next_chars(gmio_string_stream_fwd_iterator_t* it, const char* str);
|
||||
|
||||
#endif /* GMIO_INTERNAL_STRING_PARSE_H */
|
||||
|
@ -38,13 +38,15 @@ static size_t gmio_stream_buffer_read(void* cookie,
|
||||
{
|
||||
if (item_size > 0 && item_count > 0) {
|
||||
gmio_buffer_t* buff = (gmio_buffer_t*)cookie;
|
||||
const void* buff_ptr =
|
||||
buff->readonly_ptr != NULL ? buff->readonly_ptr : buff->readwrite_ptr;
|
||||
const size_t buff_remaining_size = buff->len - buff->pos;
|
||||
const size_t wanted_read_size = item_size * item_count;
|
||||
const size_t next_read_size = wanted_read_size <= buff_remaining_size ? wanted_read_size :
|
||||
buff_remaining_size;
|
||||
const size_t next_read_size =
|
||||
wanted_read_size <= buff_remaining_size ? wanted_read_size : buff_remaining_size;
|
||||
const size_t next_read_item_count = next_read_size / item_size;
|
||||
|
||||
memcpy(ptr, (const char*)buff->ptr + buff->pos, next_read_item_count * item_size);
|
||||
memcpy(ptr, (const char*)buff_ptr + buff->pos, next_read_item_count * item_size);
|
||||
buff->pos += next_read_item_count * item_size;
|
||||
return next_read_item_count;
|
||||
}
|
||||
@ -66,7 +68,7 @@ static size_t gmio_stream_buffer_write(void* cookie,
|
||||
buff_remaining_size;
|
||||
const size_t next_write_item_count = next_write_size / item_size;
|
||||
|
||||
memcpy((char*)buff->ptr + buff->pos, ptr, next_write_item_count * item_size);
|
||||
memcpy((char*)buff->readwrite_ptr + buff->pos, ptr, next_write_item_count * item_size);
|
||||
buff->pos += next_write_item_count * item_size;
|
||||
return next_write_item_count;
|
||||
}
|
||||
@ -75,7 +77,7 @@ static size_t gmio_stream_buffer_write(void* cookie,
|
||||
}
|
||||
}
|
||||
|
||||
void gmio_stream_set_buffer(gmio_stream_t *stream, gmio_buffer_t *buff)
|
||||
void gmio_stream_set_buffer(gmio_stream_t *stream, gmio_buffer_t* buff)
|
||||
{
|
||||
stream->cookie = buff;
|
||||
stream->at_end_func = gmio_stream_buffer_at_end;
|
||||
|
@ -20,12 +20,14 @@
|
||||
|
||||
#include "../src/gmio_core/stream.h"
|
||||
|
||||
typedef struct
|
||||
struct gmio_buffer
|
||||
{
|
||||
void* ptr;
|
||||
const void* readonly_ptr;
|
||||
void* readwrite_ptr;
|
||||
size_t len;
|
||||
size_t pos;
|
||||
} gmio_buffer_t;
|
||||
};
|
||||
typedef struct gmio_buffer gmio_buffer_t;
|
||||
|
||||
void gmio_stream_set_buffer(gmio_stream_t* stream, gmio_buffer_t* buff);
|
||||
|
||||
|
@ -58,7 +58,7 @@ const char* test_internal__byte_codec()
|
||||
|
||||
const char* test_internal__string_parse()
|
||||
{
|
||||
char text[] =
|
||||
const char text[] =
|
||||
"Une citation,\to je crois qu'elle est de moi :"
|
||||
"Parfois le chemin est rude.\n"
|
||||
"pi : 3.1415926535897932384626433832795";
|
||||
@ -74,7 +74,7 @@ const char* test_internal__string_parse()
|
||||
char copy_str[128];
|
||||
gmio_string_buffer_t copy_strbuff;
|
||||
|
||||
buff.ptr = text;
|
||||
buff.readonly_ptr = text;
|
||||
buff.len = strlen(text);
|
||||
buff.pos = 0;
|
||||
gmio_stream_set_buffer(&stream, &buff);
|
||||
|
Loading…
Reference in New Issue
Block a user