ds: string: update iterator interface
This commit is contained in:
@@ -13,39 +13,21 @@ B_DECLS_BEGIN;
|
||||
struct b_stream;
|
||||
struct b_string_p;
|
||||
|
||||
#define B_TYPE_STRING (b_string_get_type())
|
||||
#define B_TYPE_STRING (b_string_get_type())
|
||||
#define B_TYPE_STRING_ITERATOR (b_string_iterator_get_type())
|
||||
|
||||
B_DECLARE_TYPE(b_string);
|
||||
B_DECLARE_TYPE(b_string_iterator);
|
||||
|
||||
B_TYPE_CLASS_DECLARATION_BEGIN(b_string)
|
||||
B_TYPE_CLASS_DECLARATION_END(b_string)
|
||||
|
||||
B_TYPE_CLASS_DECLARATION_BEGIN(b_string_iterator)
|
||||
B_TYPE_CLASS_DECLARATION_END(b_string_iterator)
|
||||
|
||||
#define B_CSTR(s) (b_string_create_from_cstr(s))
|
||||
#define B_RV_CSTR(s) (B_RV(b_string_create_from_cstr(s)))
|
||||
|
||||
#define b_string_foreach(it, str) \
|
||||
for (int z__b_unique_name() = b_string_iterator_begin(str, it); \
|
||||
b_string_iterator_is_valid(it); b_string_iterator_next(it))
|
||||
|
||||
typedef struct b_string_iterator {
|
||||
b_iterator _base;
|
||||
int _m, _f;
|
||||
b_string *_tmp;
|
||||
struct b_string_p *_s_p, *_tmp_p;
|
||||
|
||||
const char **_d;
|
||||
size_t _nd, _ds;
|
||||
|
||||
b_status status;
|
||||
size_t iteration_index;
|
||||
size_t byte_index;
|
||||
size_t codepoint_index;
|
||||
b_wchar char_value;
|
||||
const char *string_value;
|
||||
size_t string_length;
|
||||
size_t string_codepoints;
|
||||
} b_string_iterator;
|
||||
|
||||
typedef enum b_strlen_flags {
|
||||
B_STRLEN_NORMAL = 0,
|
||||
B_STRLEN_IGNORE_ESC = 0x01u,
|
||||
@@ -59,6 +41,7 @@ typedef enum b_string_tokenise_flags {
|
||||
} b_string_tokenise_flags;
|
||||
|
||||
BLUE_API b_type b_string_get_type(void);
|
||||
BLUE_API b_type b_string_iterator_get_type(void);
|
||||
|
||||
B_TYPE_DEFAULT_CONSTRUCTOR(b_string, B_TYPE_STRING);
|
||||
BLUE_API b_string *b_string_create_from_cstr(const char *s);
|
||||
@@ -112,9 +95,9 @@ BLUE_API b_status b_string_insert_cstrf(
|
||||
b_string *dest, size_t at, const char *format, ...);
|
||||
BLUE_API void b_string_clear(b_string *str);
|
||||
|
||||
BLUE_API b_status b_string_tokenise(
|
||||
BLUE_API b_iterator *b_string_tokenise(
|
||||
b_string *str, const char *delims[], size_t nr_delims,
|
||||
b_string_tokenise_flags flags, b_string_iterator *it);
|
||||
b_string_tokenise_flags flags);
|
||||
|
||||
BLUE_API size_t b_string_get_size(const b_string *str, b_strlen_flags flags);
|
||||
BLUE_API size_t b_string_get_capacity(const b_string *str);
|
||||
|
||||
Reference in New Issue
Block a user