String
Header file
mln_string.h
Module
string
Structure
typedef struct {
mln_u8ptr_t data; //string content
mln_u64_t len; //string length
mln_uauto_t data_ref:1; //whether data is referenced
mln_uauto_t pool:1; //is allocated from memory pool
mln_uauto_t ref:30; //reference counter
} mln_string_t;
Functions/Macros
mln_string
mln_string(str)
Description: Create a mln_string_t
object using the string constant str
. Used to initialize the mln_string_t
variable while defining it.
Return value: mln_string_t
type structure
Example:
void foo()
{
mln_string_t s = mln_string("Hello");
}
mln_string_set
mln_string_set(pstr, s)
Description: Used to assign the string s
to the structure pointed to by the mln_string_t
pointer pstr
. At this point, the data_ref
member will be set to 1.
Return value: none
Example:
void foo()
{
char text[] = "hello";
mln_string_t s;
mln_string_set(&s, text);
}
mln_string_nset
mln_string_nset(pstr, s, n)
Description: Same as mln_string_set
, except that mln_string_t
pointed to by pstr
only records the first n
bytes of s
.
Return value: none
Example:
void foo()
{
char text[] = "hello world";
mln_string_t s;
mln_string_nset(&s, text, 5); //利用mln_log的%S进行输出时,仅会输出hello
}
mln_string_ref
mln_string_ref(pstr)
Description: Add 1 to the ref
member of the mln_string_t
structure pointed to by pstr
to directly refer to the pstr
memory structure. When freeing memory, memory is not actually freed when the reference count is greater than 1.
Return value: pointer of type mln_string_t
void foo(mln_string_t s)
{
mln_string_t *ref = mln_string_ref(s); //此时ref与s的内存地址完全相同
...
}
mln_string_free
mln_string_free(pstr)
Description: Release the mln_string_t
structure memory pointed to by ptrs
. If ref
is greater than 1, only the reference count will be decremented. If data_ref
is 1, the memory pointed to by the data
member will not be released, otherwise data
will be released. member memory, followed by freeing pstr
memory. When releasing, it will judge whether to release back to the memory pool or return to the malloc library according to the pool
member.
Return value: none
mln_string_new
mln_string_t *mln_string_new(const char *s);
Description: Create a string structure based on the string constant s
. At this time, the memory of the new string structure and its data part is allocated by the malloc library, and the content of s
is copied into the data
member.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_pool_new
mln_string_t *mln_string_pool_new(mln_alloc_t *pool, const char *s);
Description: Consistent with the mln_string_new
function, only the memory is allocated from the memory pool pointed to by pool
.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_buf_new
mln_string_t *mln_string_buf_new(mln_u8ptr_t buf, mln_u64_t len);
Description: Create a string structure using buf
and len
as string contents. Note: buf
should be allocated through malloc family functions and cannot be released externally.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_buf_pool_new
mln_string_t *mln_string_buf_pool_new(mln_alloc_t *pool, mln_u8ptr_t buf, mln_u64_t len);
Description: Create a string structure using buf
and len
as string contents. Note: buf
should be allocated from pool
and cannot be freed externally.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_dup
mln_string_t *mln_string_dup(mln_string_t *str);
Description: A complete copy of str
whose memory is allocated by malloc.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_pool_dup
mln_string_t *mln_string_pool_dup(mln_alloc_t *pool, mln_string_t *str);
Description: Consistent with the mln_string_dup
function, only memory is allocated from the memory pool pointed to by pool
.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_alloc
mln_string_t *mln_string_alloc(mln_s32_t size);
Description: Create a new string object and pre-allocate a buffer of size
bytes.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_pool_alloc
mln_string_t *mln_string_pool_alloc(mln_alloc_t *pool, mln_s32_t size);
Description: Create a new string object and pre-allocate a buffer of size
bytes. The difference with mln_string_alloc
is that all memory is allocated from the memory pool pool
.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_const_ndup
mln_string_t *mln_string_const_ndup(char *str, mln_s32_t size);
Description: Creates a new string object and copies only the first size
bytes of data in str
.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_ref_dup
mln_string_t *mln_string_ref_dup(mln_string_t *str);
Description: Create a new string structure, but the data
member in the structure points to the address pointed to by the data
member in str
, and the data_ref
in the new structure will be set.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_const_ref_dup
mln_string_t *mln_string_const_ref_dup(char *s);
Description: Create a new string structure, but the data
member in the structure points to s
, and the data_ref
in the new structure will be set.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_concat
mln_string_t *mln_string_concat(mln_string_t *s1, mln_string_t *s2, mln_string_t *sep);
Description: Concatenate the strings s1 and s2, and add sep as a separator in between.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_pool_concat
mln_string_t *mln_string_pool_concat(mln_alloc_t *pool, mln_string_t *s1, mln_string_t *s2, mln_string_t *sep);
Description: Concatenate the strings s1 and s2, adding sep as a separator in between. The pointer to the return value and the memory used for its data are both allocated from the memory pool specified by pool.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_strseqcmp
int mln_string_strseqcmp(mln_string_t *s1, mln_string_t *s2);
Description: Compare the data of s1
and s2
, if the short side exactly matches the front of the long side, then the long side is greater than the short side.
return value:
- -1 -
s1
is smaller thans2
- 1 -
s1
is larger thans2
- 0 - both are the same
Example:
int main(void)
{
mln_string_t s1 = mln_string("abcd");
mln_string_t s2 = mln_string("abcdefg");
printf("%d", mln_string_strseqcmp(&s1, &s2)); //-1
return 0;
}
mln_string_strcmp
int mln_string_strcmp(mln_string_t *s1, mln_string_t *s2);
Description: Compare the size of data in s1
and s2
.
return value:
- -1 -
s1
is smaller thans2
- 1 -
s1
is larger thans2
- 0 - both are the same
mln_string_const_strcmp
int mln_string_const_strcmp(mln_string_t *s1, char *s2);
Description: Compare the data recorded by s1
with the size of s2
.
return value:
- -1 -
s1
is smaller thans2
- 1 -
s1
is larger thans2
- 0 - both are the same
mln_string_strncmp
int mln_string_strncmp(mln_string_t *s1, mln_string_t *s2, mln_u32_t n);
Description: Compare the size of the first n
bytes of s1
and s2
.
return value:
- -1 -
s1
is smaller thans2
- 1 -
s1
is larger thans2
- 0 - both are the same
mln_string_const_strncmp
int mln_string_const_strncmp(mln_string_t *s1, char *s2, mln_u32_t n);
Description: Compare the size of the data recorded by s1
with the size of the first n
bytes of s2
.
return value:
- -1 -
s1
is smaller thans2
- 1 -
s1
is larger thans2
- 0 - both are the same
mln_string_strcasecmp
int mln_string_strcasecmp(mln_string_t *s1, mln_string_t *s2);
Description: Compare the size of s1
and s2
data, ignoring case.
return value:
- -1 -
s1
is smaller thans2
- 1 -
s1
is larger thans2
- 0 - both are the same
mln_string_const_strcasecmp
int mln_string_const_strcasecmp(mln_string_t *s1, char *s2);
Description: Compare the size of the data recorded by s1
with that of s2
, ignoring case.
return value:
- -1 -
s1
is smaller thans2
- 1 -
s1
is larger thans2
- 0 - both are the same
mln_string_const_strncasecmp
int mln_string_const_strncasecmp(mln_string_t *s1, char *s2, mln_u32_t n);
描述:比较s1
所记录的数据与s2
的前n
个字节的大小,且忽略大小写。
返回值:
- -1 -
s1
比s2
小 - 1 -
s1
比s2
大 - 0 - 二者相同
mln_string_strncasecmp
int mln_string_strncasecmp(mln_string_t *s1, mln_string_t *s2, mln_u32_t n);
Description: Compare the size of the first n
bytes of data recorded by s1
and s2
, ignoring case.
return value:
- -1 -
s1
is smaller thans2
- 1 -
s1
is larger thans2
- 0 - both are the same
mln_string_strstr
char *mln_string_strstr(mln_string_t *text, mln_string_t *pattern);
Description: Match the data recorded by text
with the same starting address as the data in pattern
.
Return value: If the match is successful, return the corresponding address in the address pointed to by the data
member of text
; otherwise, return NULL
.
mln_string_const_strstr
char *mln_string_const_strstr(mln_string_t *text, char *pattern);
Description: Matches the same starting address as pattern
in the data recorded by text
.
Return value: If the match is successful, return the corresponding address in the address pointed to by the data
member of text
; otherwise, return NULL
.
mln_string_new_strstr
mln_string_t *mln_string_new_strstr(mln_string_t *text, mln_string_t *pattern);
Description: Same function as mln_string_strstr
, but returns a string wrapped by mln_string_t
structure.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_new_const_strstr
mln_string_t *mln_string_new_const_strstr(mln_string_t *text, char *pattern);
Description: Same function as mln_string_const_strstr
, but returns a string wrapped by mln_string_t
structure.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_kmp
char *mln_string_kmp(mln_string_t *text, mln_string_t *pattern);
Description: Same function as mln_string_strstr
, but implemented by KMP algorithm. The applicable scenario of the KMP algorithm is when there are many strings with the same prefix as the pattern
in text
. For example: text
contains aaaaaaaaaabc
, pattern
contains ab
, at this time, the performance of KMP algorithm will be higher than that of naive algorithm.
Return value: If the match is successful, return the corresponding address in the address pointed to by the data
member of text
; otherwise, return NULL
.
mln_string_const_kmp
char *mln_string_const_kmp(mln_string_t *text, char *pattern);
Description: Same function as mln_string_kmp
, but pattern
is a character pointer type.
Return value: If the match is successful, return the corresponding address in the address pointed to by the data
member of text
; otherwise, return NULL
.
mln_string_new_kmp
mln_string_t *mln_string_new_kmp(mln_string_t *text, mln_string_t *pattern);
Description: Consistent with the mln_string_kmp
function, but returns the data wrapped by the mln_string_t
structure.
Return value: return mln_string_t
pointer on success, NULL
on failure.
mln_string_new_const_kmp
mln_string_t *mln_string_new_const_kmp(mln_string_t *text, char *pattern);
Description: Consistent with the mln_string_const_kmp
function, but returns the data wrapped by the mln_string_t
structure.
Return value: return mln_string_t
pointer on success, NULL
on failure.
mln_string_slice
mln_string_t *mln_string_slice(mln_string_t *s, const char *sep_array/*ended by \0*/);
Description: seq_array
is a zero-terminated array of characters, where each character of the array is a delimiter. The function will scan the data s
. When any character in seq_array
is encountered in the data, it will be divided. When multiple characters are encountered in a row, it will only be divided once, and after division, the delimiter will not appear in the in the split string.
Return value: return mln_string_t
array on success, otherwise return NULL
. The len
of the last element of the array is 0
.
Example:
int main(void)
{
mln_string_t s = mln_string("abc-def-=ghi");
mln_string_t *str, *arr = mln_string_slice(&s, "-=");
for (str = arr; str->len; ++str) {
mln_log(debug, "%S", str);
}
mln_string_slice_free(arr);
return 0;
}
mln_string_slice_free
void mln_string_slice_free(mln_string_t *array);
Description: Free the mln_string_t
array created by the mln_string_slice
function.
Return value: none
mln_string_strcat
mln_string_t *mln_string_strcat(mln_string_t *s1, mln_string_t *s2);
Description: Create a new mln_string_t
structure whose data is the result of concatenating s1
and s2
in this order.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_pool_strcat
mln_string_t *mln_string_pool_strcat(mln_alloc_t *pool, mln_string_t *s1, mln_string_t *s2);
Description: Consistent with the mln_string_strcat
function, only the memory used by the new structure is allocated by the memory pool pointed to by pool
.
Return value: return mln_string_t
pointer on success, otherwise return NULL
.
mln_string_trim
mln_string_t *mln_string_trim(mln_string_t *s, mln_string_t *mask);
Description: Remove whitespace (or other characters) specified by mask
at the beginning and end of the string.
Return value: pointer to the stripped string mln_string_t
allocated by the heap.
mln_string_pool_trim
mln_string_t *mln_string_pool_trim(mln_alloc_t *pool, mln_string_t *s, mln_string_t *mask);
Description: Same function as mln_string_trim
.
Return value: The stripped string mln_string_t
pointer allocated on the memory pool specified by pool
.
mln_string_upper
void mln_string_upper(mln_string_t *s);
Description: Convert all English letters in the string s
to uppercase.
Return value: none
mln_string_lower
void mln_string_lower(mln_string_t *s);
Description: Convert all English letters in the string s
to lowercase.
Return value: none