mirror of https://github.com/OpenTTD/OpenTTD
Codechange: make sq_scratchpad use std::span<char>
parent
b4d9682f21
commit
fca99967a7
|
@ -259,7 +259,7 @@ SQRESULT sq_getuserdata(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p,SQUserPoint
|
||||||
SQRESULT sq_settypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer typetag);
|
SQRESULT sq_settypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer typetag);
|
||||||
SQRESULT sq_gettypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag);
|
SQRESULT sq_gettypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag);
|
||||||
void sq_setreleasehook(HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook);
|
void sq_setreleasehook(HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook);
|
||||||
SQChar *sq_getscratchpad(HSQUIRRELVM v,SQInteger minsize);
|
std::span<char> sq_getscratchpad(HSQUIRRELVM v,SQInteger minsize);
|
||||||
SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger idx,SQFunctionInfo *fi);
|
SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger idx,SQFunctionInfo *fi);
|
||||||
SQRESULT sq_getclosureinfo(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars);
|
SQRESULT sq_getclosureinfo(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars);
|
||||||
SQRESULT sq_setnativeclosurename(HSQUIRRELVM v,SQInteger idx,std::string_view name);
|
SQRESULT sq_setnativeclosurename(HSQUIRRELVM v,SQInteger idx,std::string_view name);
|
||||||
|
|
|
@ -1074,7 +1074,7 @@ SQRESULT sq_readclosure(HSQUIRRELVM v,SQREADFUNC r,SQUserPointer up)
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQChar *sq_getscratchpad(HSQUIRRELVM v,SQInteger minsize)
|
std::span<char> sq_getscratchpad(HSQUIRRELVM v,SQInteger minsize)
|
||||||
{
|
{
|
||||||
return _ss(v)->GetScratchPad(minsize);
|
return _ss(v)->GetScratchPad(minsize);
|
||||||
}
|
}
|
||||||
|
|
|
@ -669,9 +669,9 @@ static SQInteger string_find(HSQUIRRELVM v)
|
||||||
SQObject str=stack_get(v,1); \
|
SQObject str=stack_get(v,1); \
|
||||||
SQInteger len=_string(str)->_len; \
|
SQInteger len=_string(str)->_len; \
|
||||||
const SQChar *sThis=_stringval(str); \
|
const SQChar *sThis=_stringval(str); \
|
||||||
SQChar *sNew=(_ss(v)->GetScratchPad(len)); \
|
std::span<char> sNew=(_ss(v)->GetScratchPad(len)); \
|
||||||
for(SQInteger i=0;i<len;i++) sNew[i]=func(sThis[i]); \
|
for(SQInteger i=0;i<len;i++) sNew[i]=func(sThis[i]); \
|
||||||
v->Push(SQString::Create(_ss(v),sNew,len)); \
|
v->Push(SQString::Create(_ss(v),std::string_view(sNew.data(), len))); \
|
||||||
return 1; \
|
return 1; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -298,8 +298,8 @@ bool ReadObject(HSQUIRRELVM v,SQUserPointer up,SQREADFUNC read,SQObjectPtr &o)
|
||||||
case OT_STRING:{
|
case OT_STRING:{
|
||||||
SQInteger len;
|
SQInteger len;
|
||||||
_CHECK_IO(SafeRead(v,read,up,&len,sizeof(SQInteger)));
|
_CHECK_IO(SafeRead(v,read,up,&len,sizeof(SQInteger)));
|
||||||
_CHECK_IO(SafeRead(v,read,up,_ss(v)->GetScratchPad(len),len));
|
_CHECK_IO(SafeRead(v,read,up,_ss(v)->GetScratchPad(len).data(),len));
|
||||||
o=SQString::Create(_ss(v),_ss(v)->GetScratchPad(-1),len);
|
o=SQString::Create(_ss(v),std::string_view(_ss(v)->GetScratchPad(-1).data(),len));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case OT_INTEGER:{
|
case OT_INTEGER:{
|
||||||
|
|
|
@ -97,8 +97,6 @@ SQSharedState::SQSharedState()
|
||||||
_printfunc = nullptr;
|
_printfunc = nullptr;
|
||||||
_debuginfo = false;
|
_debuginfo = false;
|
||||||
_notifyallexceptions = false;
|
_notifyallexceptions = false;
|
||||||
_scratchpad=nullptr;
|
|
||||||
_scratchpadsize=0;
|
|
||||||
_collectable_free_processing = false;
|
_collectable_free_processing = false;
|
||||||
#ifndef NO_GARBAGE_COLLECTOR
|
#ifndef NO_GARBAGE_COLLECTOR
|
||||||
_gc_chain=nullptr;
|
_gc_chain=nullptr;
|
||||||
|
@ -212,7 +210,6 @@ SQSharedState::~SQSharedState()
|
||||||
sq_delete(_systemstrings,SQObjectPtrVec);
|
sq_delete(_systemstrings,SQObjectPtrVec);
|
||||||
sq_delete(_metamethods,SQObjectPtrVec);
|
sq_delete(_metamethods,SQObjectPtrVec);
|
||||||
sq_delete(_stringtable,SQStringTable);
|
sq_delete(_stringtable,SQStringTable);
|
||||||
if(_scratchpad)SQ_FREE(_scratchpad,_scratchpadsize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -357,19 +354,16 @@ void SQCollectable::RemoveFromChain(SQCollectable **chain,SQCollectable *c)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SQChar* SQSharedState::GetScratchPad(SQInteger size)
|
std::span<char> SQSharedState::GetScratchPad(SQInteger size)
|
||||||
{
|
{
|
||||||
SQInteger newsize;
|
SQInteger newsize;
|
||||||
if(size>0) {
|
if(size>0) {
|
||||||
if(_scratchpadsize < size) {
|
if(_scratchpad.size() < static_cast<size_t>(size)) {
|
||||||
newsize = size + (size>>1);
|
newsize = size + (size>>1);
|
||||||
_scratchpad = (SQChar *)SQ_REALLOC(_scratchpad,_scratchpadsize,newsize);
|
_scratchpad.resize(newsize);
|
||||||
_scratchpadsize = newsize;
|
}else if(_scratchpad.size() >= static_cast<size_t>(size<<5)) {
|
||||||
|
newsize = _scratchpad.size() >> 1;
|
||||||
}else if(_scratchpadsize >= (size<<5)) {
|
_scratchpad.resize(newsize);
|
||||||
newsize = _scratchpadsize >> 1;
|
|
||||||
_scratchpad = (SQChar *)SQ_REALLOC(_scratchpad,_scratchpadsize,newsize);
|
|
||||||
_scratchpadsize = newsize;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return _scratchpad;
|
return _scratchpad;
|
||||||
|
|
|
@ -59,7 +59,7 @@ struct SQSharedState
|
||||||
SQSharedState();
|
SQSharedState();
|
||||||
~SQSharedState();
|
~SQSharedState();
|
||||||
public:
|
public:
|
||||||
SQChar* GetScratchPad(SQInteger size);
|
std::span<char> GetScratchPad(SQInteger size);
|
||||||
SQInteger GetMetaMethodIdxByName(const SQObjectPtr &name);
|
SQInteger GetMetaMethodIdxByName(const SQObjectPtr &name);
|
||||||
void DelayFinalFree(SQCollectable *collectable);
|
void DelayFinalFree(SQCollectable *collectable);
|
||||||
#ifndef NO_GARBAGE_COLLECTOR
|
#ifndef NO_GARBAGE_COLLECTOR
|
||||||
|
@ -109,8 +109,7 @@ public:
|
||||||
bool _debuginfo;
|
bool _debuginfo;
|
||||||
bool _notifyallexceptions;
|
bool _notifyallexceptions;
|
||||||
private:
|
private:
|
||||||
SQChar *_scratchpad;
|
std::vector<char> _scratchpad;
|
||||||
SQInteger _scratchpadsize;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define _sp(s) (_sharedstate->GetScratchPad(s))
|
#define _sp(s) (_sharedstate->GetScratchPad(s))
|
||||||
|
|
|
@ -302,11 +302,7 @@ bool SQVM::StringCat(const SQObjectPtr &str,const SQObjectPtr &obj,SQObjectPtr &
|
||||||
SQObjectPtr a, b;
|
SQObjectPtr a, b;
|
||||||
ToString(str, a);
|
ToString(str, a);
|
||||||
ToString(obj, b);
|
ToString(obj, b);
|
||||||
SQInteger l = _string(a)->_len , ol = _string(b)->_len;
|
dest = SQString::Create(_ss(this), fmt::format("{}{}", _stringval(a), _stringval(b)));
|
||||||
SQChar *s = _sp(l + ol + 1);
|
|
||||||
memcpy(s, _stringval(a), (size_t)l);
|
|
||||||
memcpy(s + l, _stringval(b), (size_t)ol);
|
|
||||||
dest = SQString::Create(_ss(this), _spval, l + ol);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue