Merge pull request #209 from atanasovdaniel/split

Add optional argument 'skipempty' to split function
This commit is contained in:
Alberto Demichelis
2020-07-22 18:11:41 +08:00
committed by GitHub
2 changed files with 20 additions and 15 deletions

View File

@ -249,16 +249,16 @@ static SQInteger _string_rstrip(HSQUIRRELVM v)
static SQInteger _string_split(HSQUIRRELVM v)
{
const SQChar *str,*seps;
SQChar *stemp;
SQInteger sepsize;
SQBool skipempty = SQFalse;
sq_getstring(v,2,&str);
sq_getstring(v,3,&seps);
SQInteger sepsize = sq_getsize(v,3);
sq_getstringandsize(v,3,&seps,&sepsize);
if(sepsize == 0) return sq_throwerror(v,_SC("empty separators string"));
SQInteger memsize = (sq_getsize(v,2)+1)*sizeof(SQChar);
stemp = sq_getscratchpad(v,memsize);
memcpy(stemp,str,memsize);
SQChar *start = stemp;
SQChar *end = stemp;
if(sq_gettop(v)>3) {
sq_getbool(v,4,&skipempty);
}
const SQChar *start = str;
const SQChar *end = str;
sq_newarray(v,0);
while(*end != '\0')
{
@ -267,9 +267,10 @@ static SQInteger _string_split(HSQUIRRELVM v)
{
if(cur == seps[i])
{
*end = 0;
sq_pushstring(v,start,-1);
sq_arrayappend(v,-2);
if(!skipempty || (end != start)) {
sq_pushstring(v,start,end-start);
sq_arrayappend(v,-2);
}
start = end + 1;
break;
}
@ -278,7 +279,7 @@ static SQInteger _string_split(HSQUIRRELVM v)
}
if(end != start)
{
sq_pushstring(v,start,-1);
sq_pushstring(v,start,end-start);
sq_arrayappend(v,-2);
}
return 1;
@ -510,7 +511,7 @@ static const SQRegFunction stringlib_funcs[]={
_DECL_FUNC(strip,2,_SC(".s")),
_DECL_FUNC(lstrip,2,_SC(".s")),
_DECL_FUNC(rstrip,2,_SC(".s")),
_DECL_FUNC(split,3,_SC(".ss")),
_DECL_FUNC(split,-3,_SC(".ssb")),
_DECL_FUNC(escape,2,_SC(".s")),
_DECL_FUNC(startswith,3,_SC(".ss")),
_DECL_FUNC(endswith,3,_SC(".ss")),