summaryrefslogtreecommitdiff
path: root/core/src/xmake/string/split.c
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/xmake/string/split.c')
-rw-r--r--core/src/xmake/string/split.c84
1 files changed, 41 insertions, 43 deletions
diff --git a/core/src/xmake/string/split.c b/core/src/xmake/string/split.c
index c035a5fab..5ca0c92bb 100644
--- a/core/src/xmake/string/split.c
+++ b/core/src/xmake/string/split.c
@@ -22,8 +22,8 @@
/* //////////////////////////////////////////////////////////////////////////////////////
* trace
*/
-#define TB_TRACE_MODULE_NAME "string_split"
-#define TB_TRACE_MODULE_DEBUG (0)
+#define TB_TRACE_MODULE_NAME "string_split"
+#define TB_TRACE_MODULE_DEBUG (0)
/* //////////////////////////////////////////////////////////////////////////////////////
* includes
@@ -33,62 +33,59 @@
/* //////////////////////////////////////////////////////////////////////////////////////
* private implementation
*/
-static tb_void_t xm_string_split_str(lua_State* lua, tb_char_t const* cstr, tb_size_t nstr, tb_char_t const* cdls, tb_size_t ndls, tb_bool_t strict, tb_int_t limit)
-{
- tb_int_t num = 0;
- tb_char_t const* end = cstr + nstr;
- tb_char_t const* pos = tb_strstr(cstr, cdls); // faster than tb_strnstr()
- while (pos && pos < end)
- {
- if (pos > cstr || strict)
- {
- if (limit > 0 && num + 1 >= limit)
+static tb_void_t xm_string_split_str(lua_State *lua,
+ tb_char_t const *cstr,
+ tb_size_t nstr,
+ tb_char_t const *cdls,
+ tb_size_t ndls,
+ tb_bool_t strict,
+ tb_int_t limit) {
+ tb_int_t num = 0;
+ tb_char_t const *end = cstr + nstr;
+ tb_char_t const *pos = tb_strstr(cstr, cdls); // faster than tb_strnstr()
+ while (pos && pos < end) {
+ if (pos > cstr || strict) {
+ if (limit > 0 && num + 1 >= limit) {
break;
+ }
lua_pushlstring(lua, cstr, pos - cstr);
lua_rawseti(lua, -2, ++num);
}
cstr = pos + ndls;
- pos = tb_strstr(cstr, cdls);
+ pos = tb_strstr(cstr, cdls);
}
- if (cstr < end)
- {
+ if (cstr < end) {
lua_pushlstring(lua, cstr, end - cstr);
lua_rawseti(lua, -2, ++num);
- }
- else if (strict && (limit < 0 || num < limit) && cstr == end)
- {
+ } else if (strict && (limit < 0 || num < limit) && cstr == end) {
lua_pushliteral(lua, "");
lua_rawseti(lua, -2, ++num);
}
}
-static tb_void_t xm_string_split_chr(lua_State* lua, tb_char_t const* cstr, tb_size_t nstr, tb_char_t ch, tb_bool_t strict, tb_int_t limit)
-{
- tb_int_t num = 0;
- tb_char_t const* end = cstr + nstr;
- tb_char_t const* pos = tb_strchr(cstr, ch); // faster than tb_strnchr()
- while (pos && pos < end)
- {
- if (pos > cstr || strict)
- {
- if (limit > 0 && num + 1 >= limit)
+static tb_void_t xm_string_split_chr(
+ lua_State *lua, tb_char_t const *cstr, tb_size_t nstr, tb_char_t ch, tb_bool_t strict, tb_int_t limit) {
+ tb_int_t num = 0;
+ tb_char_t const *end = cstr + nstr;
+ tb_char_t const *pos = tb_strchr(cstr, ch); // faster than tb_strnchr()
+ while (pos && pos < end) {
+ if (pos > cstr || strict) {
+ if (limit > 0 && num + 1 >= limit) {
break;
+ }
lua_pushlstring(lua, cstr, pos - cstr);
lua_rawseti(lua, -2, ++num);
}
cstr = pos + 1;
- pos = tb_strchr(cstr, ch);
+ pos = tb_strchr(cstr, ch);
}
- if (cstr < end)
- {
+ if (cstr < end) {
lua_pushlstring(lua, cstr, end - cstr);
lua_rawseti(lua, -2, ++num);
- }
- else if (strict && (limit < 0 || num < limit) && cstr == end)
- {
+ } else if (strict && (limit < 0 || num < limit) && cstr == end) {
lua_pushliteral(lua, "");
lua_rawseti(lua, -2, ++num);
}
@@ -105,28 +102,29 @@ static tb_void_t xm_string_split_chr(lua_State* lua, tb_char_t const* cstr, tb_s
* @param strict is strict?
* @param limit the limit count
*/
-tb_int_t xm_string_split(lua_State* lua)
-{
- // check
+tb_int_t xm_string_split(lua_State *lua) {
tb_assert_and_check_return_val(lua, 0);
// get string
size_t nstr = 0;
- tb_char_t const* cstr = luaL_checklstring(lua, 1, &nstr);
+ tb_char_t const *cstr = luaL_checklstring(lua, 1, &nstr);
// get delimiter
size_t ndls = 0;
- tb_char_t const* cdls = luaL_checklstring(lua, 2, &ndls);
+ tb_char_t const *cdls = luaL_checklstring(lua, 2, &ndls);
// is strict?
- tb_bool_t const strict = (tb_bool_t)lua_toboolean(lua, 3);
+ tb_bool_t const strict = (tb_bool_t)lua_toboolean(lua, 3);
// get limit count
- tb_int_t const limit = (tb_int_t)luaL_optinteger(lua, 4, -1);
+ tb_int_t const limit = (tb_int_t)luaL_optinteger(lua, 4, -1);
// split it
lua_newtable(lua);
- if (ndls == 1) xm_string_split_chr(lua, cstr, (tb_size_t)nstr, cdls[0], strict, limit);
- else xm_string_split_str(lua, cstr, (tb_size_t)nstr, cdls, ndls, strict, limit);
+ if (ndls == 1) {
+ xm_string_split_chr(lua, cstr, (tb_size_t)nstr, cdls[0], strict, limit);
+ } else {
+ xm_string_split_str(lua, cstr, (tb_size_t)nstr, cdls, ndls, strict, limit);
+ }
return 1;
}