MtFmt 1.0.0
MtFmt is a format library on embed. system and wrote by pure C.
载入中...
搜索中...
未找到
宏定义 | 函数
mm_string.c 文件参考

字符串 更多...

#include "mm_string.h"
#include "mm_heap.h"
#include <stddef.h>
#include <string.h>

宏定义

#define MSTR_IMP_SOURCES   1
 
#define MSTR_SIZE_EXPAND_MAX   1024
 进行扩展的阈值
 
#define MSTR_SIZE_LARGE_CAP_SIZE_STEP   512
 超过X2阈值的情况下每次增大的大小
 

函数

static mstr_bool_t mstr_compare_helper (const char *a, const char *b, usize_t len)
 比较相同长度len的字串a和b是否一致
 
static void mstr_reverse_unicode_helper (mstr_char_t *buff, const mstr_char_t *pe)
 翻转Unicode字符编码, 让其正确, 在UTF-8关闭的情况下, 该函数不做任何操作
 
static void * mstr_string_realloc (void *old_ptr, mstr_bool_t is_stack, usize_t old_size, usize_t new_size)
 重新分配内存区
 
static usize_t mstr_resize_tactic (usize_t old_sz, usize_t inc_len)
 改变cap的策略
 
static mstr_result_t mstr_strlen (usize_t *len, usize_t *count, const mstr_char_t *str, const mstr_char_t *str_end)
 计算字符串长度
 
 mstr_create (MString *str, const char *content)
 创建字符串
 
 mstr_move_from (MString *str, MString *other)
 从other移动字符串到str
 
 mstr_copy_from (MString *str, const MString *other)
 从other复制字符串到str
 
 mstr_reserve (MString *str, usize_t new_size)
 保留 sz 个char数的内存区
 
 mstr_append (MString *str, mstr_codepoint_t ch)
 向字符串尾部插入一个字符
 
 mstr_repeat_append (MString *str, mstr_codepoint_t ch, usize_t cnt)
 向字符串尾部重复插入一个字符
 
 mstr_concat (MString *str, const MString *other)
 拼接字符串
 
 mstr_concat_cstr (MString *str, const char *other)
 拼接字符串(cstr)
 
 mstr_concat_cstr_slice (MString *str, const char *start, const char *end)
 拼接字符串(cstr slice)
 
 MSTR_EXPORT_API (void)
 释放由 mstr_heap_allocate 分配的内存
 
 MSTR_EXPORT_API (const char *)
 转换为cstr
 
 mstr_equal (const MString *a, const MString *b)
 判断两个字符串是否相等
 
 mstr_equal_cstr (const MString *a, const mstr_char_t *b, usize_t b_cnt)
 判断两个字符串是否相等(cstr)
 
 mstr_start_with (const MString *str, const char *prefix, usize_t prefix_cnt)
 判断字符串是否以某个字串开始
 
 mstr_end_with (const MString *str, const char *suffix, usize_t suffix_cnt)
 判断字符串是否以某个字串结束
 
 mstr_contains (const MString *str, const char *pattern, usize_t pattern_cnt)
 判断字符串是否含有pattern
 
 mstr_char_at (const MString *str, usize_t idx)
 取得第idx位置的字符ch
 
 mstr_remove (MString *str, mstr_codepoint_t *removed_ch, usize_t idx)
 从字符串中移除idx位置的字符
 
 mstr_insert (MString *str, usize_t idx, mstr_codepoint_t ch)
 从字符串中idx位置插入一个字符
 
 MSTR_EXPORT_API (usize_t)
 取得当前的空闲内存大小
 
 mstr_lead_char_offset (const mstr_char_t *buff, usize_t hist_len)
 判断buff的lead字符偏移量(相反数, 比如偏移量是-2但是会返回2)
 
 mstr_as_utf8 (mstr_codepoint_t code, mstr_char_t *result, usize_t *result_len)
 转换为UTF-8, 如果未启用UTF-8, 该函数返回未实现错误
 
 mstr_codepoint_of (mstr_codepoint_t *code, const mstr_char_t *ch, usize_t byte_count)
 取得lead字符ch[0]所跟着的内容的unicode代码点值 如果未启用UTF-8, 该函数返回未实现错误
 
 mstr_char_offset_at (const MString *str, usize_t idx)
 找到第idx个字符的offset
 

详细描述

字符串

作者
向阳 (hinat.nosp@m.a.ho.nosp@m.shino.nosp@m.@fox.nosp@m.mail..nosp@m.com)
版本
1.0
日期
2023-04-22

宏定义说明

◆ MSTR_IMP_SOURCES

#define MSTR_IMP_SOURCES   1

◆ MSTR_SIZE_EXPAND_MAX

#define MSTR_SIZE_EXPAND_MAX   1024

进行扩展的阈值

◆ MSTR_SIZE_LARGE_CAP_SIZE_STEP

#define MSTR_SIZE_LARGE_CAP_SIZE_STEP   512

超过X2阈值的情况下每次增大的大小

函数说明

◆ mstr_append()

mstr_append ( MString str,
mstr_codepoint_t  ch 
)

向字符串尾部插入一个字符

参数
[in,out]str字符串
[in]ch需要放入的字符(unicode point)
返回
mstr_result_t: 结果

◆ mstr_as_utf8()

mstr_as_utf8 ( mstr_codepoint_t  code,
mstr_char_t result,
usize_t result_len 
)

转换为UTF-8, 如果未启用UTF-8, 该函数返回未实现错误

参数
code字符代码点
result转换输出, 至少要有6个bytes
result_len转换输出的有效长度

◆ mstr_char_at()

mstr_char_at ( const MString str,
usize_t  idx 
)

取得第idx位置的字符ch

注意
边界检查失败会造成assert false, 函数失败会返回0 而不是返回mstr_result

◆ mstr_char_offset_at()

mstr_char_offset_at ( const MString str,
usize_t  idx 
)

找到第idx个字符的offset

参数
[in]str字符串
[in]idx字符索引
注意
该函数会进行边界检查
返回
usize_t: 相对于 buff 的偏移量, buff + 返回值 是该字符的 lead

◆ mstr_codepoint_of()

mstr_codepoint_of ( mstr_codepoint_t code,
const mstr_char_t ch,
usize_t  byte_count 
)

取得lead字符ch[0]所跟着的内容的unicode代码点值 如果未启用UTF-8, 该函数返回未实现错误

参数
[out]code解码结果
[in]ch字符串
[in]byte_count字符的字节数

◆ mstr_compare_helper()

static mstr_bool_t mstr_compare_helper ( const char *  a,
const char *  b,
usize_t  len 
)
static

比较相同长度len的字串a和b是否一致

参数
a字符串a
b字符串b
len字符串a和b的长度
返回
mstr_bool_t: 比较结果

◆ mstr_concat()

mstr_concat ( MString str,
const MString other 
)

拼接字符串

参数
[out]str目标字符串
[in]other需要拼接的源字符串
返回
mstr_result_t: 拼接结果

◆ mstr_concat_cstr()

mstr_concat_cstr ( MString str,
const char *  other 
)

拼接字符串(cstr)

参数
[out]str目标字符串
[in]other需要拼接的源字符串
返回
mstr_result_t: 拼接结果

◆ mstr_concat_cstr_slice()

mstr_concat_cstr_slice ( MString str,
const char *  start,
const char *  end 
)

拼接字符串(cstr slice)

参数
[out]str目标字符串
[in]start需要拼接的源字符串起始
[in]end需要拼接的源字符串结束
返回
mstr_result_t: 拼接结果

◆ mstr_contains()

mstr_contains ( const MString str,
const char *  pattern,
usize_t  pattern_cnt 
)

判断字符串是否含有pattern

参数
[in]str字符串
[in]pattern需要包含的内容
[in]pattern_cnt需要包含的内容的字符数
注意
在发生意外的错误(如编码问题, 内存分配失败)时, 该函数也会返回False

◆ mstr_copy_from()

mstr_copy_from ( MString str,
const MString other 
)

从other复制字符串到str

参数
[out]str目标字符串
[in]other需要移动的字符串
注意
该函数会清空释放原有的字符串并创建一个新的, other需要再次释放, 且会释放掉原有的str

◆ mstr_create()

mstr_create ( MString str,
const char *  content 
)

创建字符串

参数
[out]str需要创建的字符串结构
[in]content需要丢到字符串里面的内容
返回
mstr_result_t: 创建结果

◆ mstr_end_with()

mstr_end_with ( const MString str,
const char *  suffix,
usize_t  suffix_cnt 
)

判断字符串是否以某个字串结束

参数
[in]str字符串
[in]suffix需要确认其结束的内容
[in]suffix_cntsuffix的char字符数

◆ mstr_equal()

mstr_equal ( const MString a,
const MString b 
)

判断两个字符串是否相等

参数
[in]a字符串a
[in]b字符串b
返回
mstr_bool_t: 字符串相等情况

◆ mstr_equal_cstr()

mstr_equal_cstr ( const MString a,
const mstr_char_t b,
usize_t  b_cnt 
)

判断两个字符串是否相等(cstr)

参数
[in]a字符串a
[in]b字符串b
[in]b_cnt字符串b的字符数
返回
mstr_bool_t: 字符串相等情况

◆ MSTR_EXPORT_API() [1/3]

MSTR_EXPORT_API ( const char *  )

转换为cstr

参数
str字符串
返回
const char*: C字符串指针

◆ MSTR_EXPORT_API() [2/3]

MSTR_EXPORT_API ( usize_t  )

取得当前的空闲内存大小

判断前导字符lead后面的字符长度, 前导字符包括在内

取得自运行以来空闲内存最小的值

取得当前的空闲内存大小

◆ MSTR_EXPORT_API() [3/3]

MSTR_EXPORT_API ( void  )

释放由 mstr_heap_allocate 分配的内存

释放由 mstr_heap_allocate 分配的内存

释放一个字符串所占的内存

取得迭代器

翻转字符串, 不做任何其它处理

参数
[in,out]str需要翻转的字符串
[in,out]str需要翻转的字符串
注意
通常情况下不需要使用此函数, 此函数不会保证反转后的编码正确。它设计出来是为了给明确只有ASCII字符的字符串做翻转的, 在UTF-8编码下, 该函数可降低很多操作
参数
[out]it迭代器输出
[in]str原字符串
str字符串结构

◆ mstr_insert()

mstr_insert ( MString str,
usize_t  idx,
mstr_codepoint_t  ch 
)

从字符串中idx位置插入一个字符

参数
[in,out]str字符串
[in]idx需要插入的字符位置
[in]ch需要插入的字符

◆ mstr_lead_char_offset()

mstr_lead_char_offset ( const mstr_char_t buff,
usize_t  hist_len 
)

判断buff的lead字符偏移量(相反数, 比如偏移量是-2但是会返回2)

注解
在UTF-8功能启用的情况下, 其判断UTF-8编码的字符长度, 错误返回0, 否则, 该函数永远返回1
参数
[in]buff字符数组
[in]hist_len字符数组允许往前查找的长度, 大于等于0 (不然就返回0啦), 如果大于6, 那么最大会被限制到6(1个utf-8编码的长度)

◆ mstr_move_from()

mstr_move_from ( MString str,
MString other 
)

从other移动字符串到str

参数
[out]str目标字符串
[in,out]other需要移动的字符串
注意
该函数转移other的所有权, other不需要再次释放, 且会释放掉str

◆ mstr_remove()

mstr_remove ( MString str,
mstr_codepoint_t removed_ch,
usize_t  idx 
)

从字符串中移除idx位置的字符

参数
[in,out]str字符串
[out]remoed_ch被移除的字符, 可以为NULL
[in]idx需要移除的字符位置

◆ mstr_repeat_append()

mstr_repeat_append ( MString str,
mstr_codepoint_t  ch,
usize_t  cnt 
)

向字符串尾部重复插入一个字符

参数
[in,out]str字符串
[in]ch需要放入的字符(unicode point)
[in]cnt重复次数
返回
mstr_result_t: 结果

◆ mstr_reserve()

mstr_reserve ( MString str,
usize_t  new_size 
)

保留 sz 个char数的内存区

参数
[in,out]str字符串
[in]new_size需要保留的大小

◆ mstr_resize_tactic()

static usize_t mstr_resize_tactic ( usize_t  old_sz,
usize_t  inc_len 
)
static

改变cap的策略

参数
[in]old_sz以前的大小
[in]inc_len至少需要增加的大小, 会在此基础上增加1

◆ mstr_reverse_unicode_helper()

static void mstr_reverse_unicode_helper ( mstr_char_t buff,
const mstr_char_t pe 
)
static

翻转Unicode字符编码, 让其正确, 在UTF-8关闭的情况下, 该函数不做任何操作

参数
[in,out]buff操作数组
[in]pe数组的末尾位置

◆ mstr_start_with()

mstr_start_with ( const MString str,
const char *  prefix,
usize_t  prefix_cnt 
)

判断字符串是否以某个字串开始

参数
[in]str字符串
[in]prefix需要确认其开始的内容
[in]prefix_cntprefix的char字符数

◆ mstr_string_realloc()

static void * mstr_string_realloc ( void *  old_ptr,
mstr_bool_t  is_stack,
usize_t  old_size,
usize_t  new_size 
)
static

重新分配内存区

参数
[in]old_ptr以前的内存区位置
[in]is_stack是否为stack上分配内存
[in]old_size原本的内存区大小
[in]new_size需要分配的大小
返回
void*: 新分配的地址, 失败返回NULL

◆ mstr_strlen()

static mstr_result_t mstr_strlen ( usize_t len,
usize_t count,
const mstr_char_t str,
const mstr_char_t str_end 
)
static

计算字符串长度

参数
len字符长度
count字符串占用的字节数
str字符串
str_end字符串结束, 为NULL表示'\0'自己算