From b41817fcadc1284f6c7d6e39f38f0e251849276e Mon Sep 17 00:00:00 2001 From: Hugues Delorme Date: Tue, 28 Jan 2014 10:11:26 +0100 Subject: [PATCH] ascii_parse: add function foug_checked_next_chars() --- src/internal/ascii_parse.c | 16 +++++++++++++++- src/internal/ascii_parse.h | 6 ++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/internal/ascii_parse.c b/src/internal/ascii_parse.c index 1252862..b89f9a0 100644 --- a/src/internal/ascii_parse.c +++ b/src/internal/ascii_parse.c @@ -14,7 +14,7 @@ void foug_ascii_stream_fwd_iterator_init(foug_ascii_stream_fwd_iterator_t *it) foug_next_char(it); } -char *foug_current_char(foug_ascii_stream_fwd_iterator_t *it) +char *foug_current_char(const foug_ascii_stream_fwd_iterator_t *it) { if (it != NULL && it->buffer_pos < it->buffer.len) return it->buffer.ptr + it->buffer_pos; @@ -101,3 +101,17 @@ int foug_get_real32(const char *str, foug_real32_t *value_ptr) return 0; } + +foug_bool_t foug_checked_next_chars(foug_ascii_stream_fwd_iterator_t *it, const char *str) +{ + size_t pos = 0; + const char* curr_char = foug_current_char(it); + foug_bool_t same = curr_char != NULL && *curr_char == *str; + + while (same) { + curr_char = foug_next_char(it); + same = curr_char != NULL && *curr_char == str[++pos]; + } + + return same; +} diff --git a/src/internal/ascii_parse.h b/src/internal/ascii_parse.h index 8de967e..33198e5 100644 --- a/src/internal/ascii_parse.h +++ b/src/internal/ascii_parse.h @@ -22,10 +22,12 @@ typedef struct } foug_ascii_stream_fwd_iterator_t; void foug_ascii_stream_fwd_iterator_init(foug_ascii_stream_fwd_iterator_t* it); -char* foug_current_char(foug_ascii_stream_fwd_iterator_t* it); -char* foug_next_char(foug_ascii_stream_fwd_iterator_t* it); +char* foug_current_char(const foug_ascii_stream_fwd_iterator_t* it); void foug_skip_spaces(foug_ascii_stream_fwd_iterator_t* it); int foug_eat_word(foug_ascii_stream_fwd_iterator_t* it, foug_ascii_string_buffer_t* buffer); int foug_get_real32(const char* str, foug_real32_t* value_ptr); +char* foug_next_char(foug_ascii_stream_fwd_iterator_t* it); +foug_bool_t foug_checked_next_chars(foug_ascii_stream_fwd_iterator_t* it, const char* str); + #endif /* FOUG_INTERNAL_ASCII_PARSE_H */