diff options
Diffstat (limited to 'core/src/xmake/string/split.c')
| -rw-r--r-- | core/src/xmake/string/split.c | 84 |
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; } |
