object: add b_string_substr
This commit is contained in:
@@ -37,7 +37,6 @@ BLUE_API b_status b_string_replace_all(b_string *str, const char *new_data);
|
||||
BLUE_API void b_string_append_s(b_string *dest, const b_string *src);
|
||||
BLUE_API void b_string_append_cstr(b_string *dest, const char *src);
|
||||
BLUE_API void b_string_append_cstrf(b_string *dest, const char *format, ...);
|
||||
BLUE_API void b_string_prepend_s(b_string *dest, const b_string *src);
|
||||
BLUE_API void b_string_prepend_cstr(b_string *dest, const char *src);
|
||||
BLUE_API void b_string_prepend_cstrf(b_string *dest, const char *format, ...);
|
||||
BLUE_API void b_string_insert_s(b_string *dest, const b_string *src, size_t at);
|
||||
@@ -57,6 +56,7 @@ BLUE_API char b_string_back(const b_string *str);
|
||||
BLUE_API void b_string_pop_back(b_string *str);
|
||||
|
||||
BLUE_API const char *b_string_ptr(const b_string *str);
|
||||
BLUE_API b_string *b_string_substr(const b_string *str, size_t start, size_t len);
|
||||
|
||||
BLUE_API char *b_strdup(const char *s);
|
||||
BLUE_API size_t b_strlen(const char *s, b_strlen_flags flags);
|
||||
|
||||
@@ -365,6 +365,28 @@ const char *b_string_ptr(const struct b_string *str)
|
||||
return str->s_data.d_external;
|
||||
}
|
||||
|
||||
struct b_string *b_string_substr(const struct b_string *str, size_t start, size_t len)
|
||||
{
|
||||
if (start > b_string_get_size(str, B_STRLEN_NORMAL)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (start + len > b_string_get_size(str, B_STRLEN_NORMAL)) {
|
||||
len = b_string_get_size(str, B_STRLEN_NORMAL) - start;
|
||||
}
|
||||
|
||||
struct b_string *newstr = b_string_create();
|
||||
b_string_reserve(newstr, len);
|
||||
|
||||
const char *src = b_string_ptr(str) + start;
|
||||
char *dest = string_ptr(newstr);
|
||||
|
||||
memcpy(dest, src, len);
|
||||
newstr->s_len = len;
|
||||
|
||||
return newstr;
|
||||
}
|
||||
|
||||
static void string_release(struct b_object *obj)
|
||||
{
|
||||
struct b_string *str = B_STRING(obj);
|
||||
|
||||
Reference in New Issue
Block a user