ds: string: update iterator interface

This commit is contained in:
2025-10-29 14:35:36 +00:00
parent 0f89901239
commit b292168c70
2 changed files with 180 additions and 207 deletions

View File

@@ -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);