From 656c6a0d68362a1f62935924496ce291bf41a96b Mon Sep 17 00:00:00 2001 From: zeromus Date: Tue, 10 May 2016 20:56:46 -0500 Subject: [PATCH] add SQPString and sq_getpstring() - an easy way to retrieve strings along with their size, to avoid useless strlens later. it's named PString to suggest that it's like a pascal-style PSTring, prefixed with the length--that's basically what it is. --- include/squirrel.h | 7 +++++++ squirrel/sqapi.cpp | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/include/squirrel.h b/include/squirrel.h index 221a0ae..4034fc1 100644 --- a/include/squirrel.h +++ b/include/squirrel.h @@ -156,6 +156,12 @@ typedef struct tagSQObject SQObjectValue _unVal; }SQObject; +typedef struct tagSQPString +{ + SQInteger len; + SQChar* str; +} SQPString; + typedef struct tagSQMemberHandle{ SQBool _static; SQInteger _index; @@ -259,6 +265,7 @@ SQUIRREL_API SQBool sq_instanceof(HSQUIRRELVM v); SQUIRREL_API SQRESULT sq_tostring(HSQUIRRELVM v,SQInteger idx); SQUIRREL_API void sq_tobool(HSQUIRRELVM v, SQInteger idx, SQBool *b); SQUIRREL_API SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c); +SQUIRREL_API SQRESULT sq_getpstring(HSQUIRRELVM v,SQInteger idx,SQPString *pstr); SQUIRREL_API SQRESULT sq_getinteger(HSQUIRRELVM v,SQInteger idx,SQInteger *i); SQUIRREL_API SQRESULT sq_getfloat(HSQUIRRELVM v,SQInteger idx,SQFloat *f); SQUIRREL_API SQRESULT sq_getbool(HSQUIRRELVM v,SQInteger idx,SQBool *b); diff --git a/squirrel/sqapi.cpp b/squirrel/sqapi.cpp index d7b49eb..489e95f 100644 --- a/squirrel/sqapi.cpp +++ b/squirrel/sqapi.cpp @@ -680,6 +680,15 @@ SQRESULT sq_getbool(HSQUIRRELVM v,SQInteger idx,SQBool *b) return SQ_ERROR; } +SQRESULT sq_getpstring(HSQUIRRELVM v,SQInteger idx,SQPString *pstr) +{ + SQObjectPtr *o = NULL; + _GETSAFE_OBJ(v, idx, OT_STRING,o); + pstr->len = _stringlen(*o); + pstr->str = _stringval(*o); + return SQ_OK; +} + SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c) { SQObjectPtr *o = NULL;