gmio_stl: make use of gmio_stl_read_args::func_stla_get_streamsize

This commit is contained in:
Hugues Delorme 2016-01-13 15:00:08 +01:00
parent f84eba82fb
commit 0d7eb270bc

View File

@ -105,7 +105,7 @@ struct gmio_stringstream_stla_cookie
{ {
/* Copy of gmio_stla_read() corresponding argument */ /* Copy of gmio_stla_read() corresponding argument */
struct gmio_rwargs* rwargs; struct gmio_rwargs* rwargs;
/* Cache for gmio_stream_size(&transfer->stream) */ /* Cache for the input stream size */
gmio_streamsize_t stream_size; gmio_streamsize_t stream_size;
/* Offset (in bytes) from beginning of stream : current position */ /* Offset (in bytes) from beginning of stream : current position */
gmio_streamoffset_t stream_offset; gmio_streamoffset_t stream_offset;
@ -120,7 +120,7 @@ struct gmio_stla_parse_data
gmio_bool_t error; gmio_bool_t error;
struct gmio_stringstream strstream; struct gmio_stringstream strstream;
struct gmio_stringstream_stla_cookie strstream_cookie; struct gmio_stringstream_stla_cookie strstream_cookie;
struct gmio_string string_buffer; struct gmio_string strbuff;
struct gmio_stl_mesh_creator* creator; struct gmio_stl_mesh_creator* creator;
}; };
@ -159,8 +159,13 @@ int gmio_stla_read(struct gmio_stl_read_args* args)
parse_data.strstream_cookie.rwargs = core_args; parse_data.strstream_cookie.rwargs = core_args;
parse_data.strstream_cookie.stream_offset = 0; parse_data.strstream_cookie.stream_offset = 0;
parse_data.strstream_cookie.stream_size = parse_data.strstream_cookie.stream_size =
gmio_stream_size(&core_args->stream); args->func_stla_get_streamsize != NULL ?
args->func_stla_get_streamsize(
&core_args->stream, &core_args->stream_memblock) :
gmio_stream_size(&core_args->stream);
parse_data.strstream_cookie.is_stop_requested = GMIO_FALSE; parse_data.strstream_cookie.is_stop_requested = GMIO_FALSE;
parse_data.strstream.stream = core_args->stream; parse_data.strstream.stream = core_args->stream;
@ -170,9 +175,7 @@ int gmio_stla_read(struct gmio_stl_read_args* args)
parse_data.strstream.func_stream_read_hook = gmio_stringstream_stla_read_hook; parse_data.strstream.func_stream_read_hook = gmio_stringstream_stla_read_hook;
gmio_stringstream_init_pos(&parse_data.strstream); gmio_stringstream_init_pos(&parse_data.strstream);
parse_data.string_buffer.ptr = &fixed_buffer[0]; parse_data.strbuff = gmio_string(fixed_buffer, 0, sizeof(fixed_buffer));
parse_data.string_buffer.len = 0;
parse_data.string_buffer.max_len = GMIO_STLA_READ_STRING_MAX_LEN;
parse_data.creator = &args->mesh_creator; parse_data.creator = &args->mesh_creator;
@ -259,7 +262,7 @@ static void stla_error_token_expected(
/* Eats next token string and checks it against an expected token /* Eats next token string and checks it against an expected token
* *
* This procedure copies the token string into internal * This procedure copies the token string into internal
* struct gmio_stla_parse_data::string_buffer * struct gmio_stla_parse_data::strbuff
*/ */
static int stla_eat_next_token( static int stla_eat_next_token(
struct gmio_stla_parse_data* data, enum gmio_stla_token expected_token); struct gmio_stla_parse_data* data, enum gmio_stla_token expected_token);
@ -430,7 +433,7 @@ void stla_error_msg(struct gmio_stla_parse_data* data, const char* msg)
" current token string: \"%s\"\n", " current token string: \"%s\"\n",
msg, msg,
stla_token_to_string(data->token), stla_token_to_string(data->token),
data->string_buffer.ptr); data->strbuff.ptr);
data->error = GMIO_TRUE; data->error = GMIO_TRUE;
data->token = unknown_token; data->token = unknown_token;
} }
@ -454,7 +457,7 @@ int stla_eat_next_token(
struct gmio_stla_parse_data* data, struct gmio_stla_parse_data* data,
enum gmio_stla_token expected_token) enum gmio_stla_token expected_token)
{ {
struct gmio_string* strbuff = &data->string_buffer; struct gmio_string* strbuff = &data->strbuff;
enum gmio_eat_word_error eat_error; enum gmio_eat_word_error eat_error;
strbuff->len = 0; strbuff->len = 0;
@ -517,7 +520,7 @@ int stla_eat_until_token(
{ {
if (!stla_token_match_candidate(data->token, end_tokens)) { if (!stla_token_match_candidate(data->token, end_tokens)) {
struct gmio_stringstream* sstream = &data->strstream; struct gmio_stringstream* sstream = &data->strstream;
struct gmio_string* strbuff = &data->string_buffer; struct gmio_string* strbuff = &data->strbuff;
gmio_bool_t end_token_found = GMIO_FALSE; gmio_bool_t end_token_found = GMIO_FALSE;
do { do {
@ -567,9 +570,9 @@ gmio_bool_t stla_parsing_can_continue(const struct gmio_stla_parse_data* data)
int parse_solidname_beg(struct gmio_stla_parse_data* data) int parse_solidname_beg(struct gmio_stla_parse_data* data)
{ {
if (stla_eat_next_token(data, unknown_token) == 0) { if (stla_eat_next_token(data, unknown_token) == 0) {
data->token = stla_find_token_from_string(&data->string_buffer); data->token = stla_find_token_from_string(&data->strbuff);
if (data->token == FACET_token || data->token == ENDSOLID_token) { if (data->token == FACET_token || data->token == ENDSOLID_token) {
gmio_string_clear(&data->string_buffer); gmio_string_clear(&data->strbuff);
return 0; return 0;
} }
else { else {
@ -596,7 +599,7 @@ int parse_beginsolid(struct gmio_stla_parse_data* data)
gmio_stl_mesh_creator_ascii_begin_solid( gmio_stl_mesh_creator_ascii_begin_solid(
data->creator, data->creator,
data->strstream_cookie.stream_size, data->strstream_cookie.stream_size,
data->string_buffer.ptr); data->strbuff.ptr);
return 0; return 0;
} }
} }
@ -645,7 +648,7 @@ int parse_xyz_coords(struct gmio_stla_parse_data* data, struct gmio_stl_coords*
errc += !is_float_char(strbuff); errc += !is_float_char(strbuff);
coords->z = gmio_stringstream_parse_float32(sstream); coords->z = gmio_stringstream_parse_float32(sstream);
data->string_buffer.len = 0; data->strbuff.len = 0;
data->token = unknown_token; data->token = unknown_token;
return errc; return errc;
@ -683,7 +686,7 @@ void parse_facets(struct gmio_stla_parse_data* data)
const gmio_stl_mesh_creator_func_add_triangle_t func_add_triangle = const gmio_stl_mesh_creator_func_add_triangle_t func_add_triangle =
data->creator->func_add_triangle; data->creator->func_add_triangle;
void* creator_cookie = data->creator->cookie; void* creator_cookie = data->creator->cookie;
struct gmio_string* strbuff = &data->string_buffer; struct gmio_string* strbuff = &data->strbuff;
uint32_t i_facet = 0; uint32_t i_facet = 0;
struct gmio_stl_triangle facet; struct gmio_stl_triangle facet;