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_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_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_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_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_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);
|
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 void b_string_pop_back(b_string *str);
|
||||||
|
|
||||||
BLUE_API const char *b_string_ptr(const 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 char *b_strdup(const char *s);
|
||||||
BLUE_API size_t b_strlen(const char *s, b_strlen_flags flags);
|
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;
|
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)
|
static void string_release(struct b_object *obj)
|
||||||
{
|
{
|
||||||
struct b_string *str = B_STRING(obj);
|
struct b_string *str = B_STRING(obj);
|
||||||
|
|||||||
Reference in New Issue
Block a user