mirror of
https://github.com/albertodemichelis/squirrel.git
synced 2026-01-12 14:38:42 +01:00
Merge pull request #209 from atanasovdaniel/split
Add optional argument 'skipempty' to split function
This commit is contained in:
@ -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")),
|
||||
|
||||
Reference in New Issue
Block a user