mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-04-19 19:35:26 +00:00
optimizations
This commit is contained in:
parent
dcd01e1231
commit
55b0ecb487
3 changed files with 38 additions and 33 deletions
|
|
@ -57,6 +57,7 @@ enum EvalConstants
|
|||
MaxStackSize = 1024,
|
||||
FieldBufferSizeString = 2048,
|
||||
FieldBufferSizeNumeric = 128,
|
||||
ConcatBufferInitialSize = 8192,
|
||||
MethodOnComponent = -2
|
||||
};
|
||||
|
||||
|
|
@ -118,6 +119,23 @@ S32 _STK = 0;
|
|||
char curFieldArray[256];
|
||||
char prevFieldArray[256];
|
||||
|
||||
const char* tsconcat(const char* strA, const char* strB, S32& outputLen)
|
||||
{
|
||||
S32 lenA = dStrlen(strA);
|
||||
S32 lenB = dStrlen(strB);
|
||||
|
||||
S32 len = lenA + lenB + 1;
|
||||
|
||||
char* concatBuffer = (char*)dMalloc(len);
|
||||
|
||||
concatBuffer[len - 1] = '\0';
|
||||
memcpy(concatBuffer, strA, lenA);
|
||||
memcpy(concatBuffer + lenA, strB, lenB);
|
||||
|
||||
outputLen = lenA + lenB;
|
||||
return concatBuffer;
|
||||
}
|
||||
|
||||
namespace Con
|
||||
{
|
||||
// Current script file name and root, these are registered as
|
||||
|
|
@ -1727,7 +1745,6 @@ ConsoleValue CodeBlock::exec(U32 ip, const char* functionName, Namespace* thisNa
|
|||
{
|
||||
if (nsEntry->mFunctionOffset)
|
||||
{
|
||||
// TODO: not make this strings only for returns.
|
||||
ConsoleValue returnFromFn = nsEntry->mCode->exec(nsEntry->mFunctionOffset, fnName, nsEntry->mNamespace, callArgc, callArgv, false, nsEntry->mPackage);
|
||||
stack[_STK + 1] = std::move(returnFromFn);
|
||||
}
|
||||
|
|
@ -1834,34 +1851,28 @@ ConsoleValue CodeBlock::exec(U32 ip, const char* functionName, Namespace* thisNa
|
|||
|
||||
case OP_ADVANCE_STR_APPENDCHAR:
|
||||
{
|
||||
// TODO: Create a better way to handle string concatination without
|
||||
// heap allocating every time.
|
||||
|
||||
val = stack[_STK].getString();
|
||||
dsize_t len = dStrlen(val) + 2;
|
||||
|
||||
char buff[2];
|
||||
buff[0] = (char)code[ip++];
|
||||
buff[1] = '\0';
|
||||
|
||||
char* concat = new char[len];
|
||||
dMemset(concat, 0, len);
|
||||
dStrcat(concat, val, len);
|
||||
dStrcat(concat, buff, len);
|
||||
|
||||
stack[_STK].setString(concat);
|
||||
|
||||
delete[] concat;
|
||||
S32 len;
|
||||
const char* concat = tsconcat(stack[_STK].getString(), buff, len);
|
||||
|
||||
stack[_STK].setStringRef(concat, len);
|
||||
break;
|
||||
}
|
||||
|
||||
case OP_REWIND_STR:
|
||||
TORQUE_CASE_FALLTHROUGH;
|
||||
case OP_TERMINATE_REWIND_STR:
|
||||
stack[_STK - 1].setString((String(stack[_STK - 1] + String(stack[_STK]))));
|
||||
{
|
||||
S32 len;
|
||||
const char* concat = tsconcat(stack[_STK - 1].getString(), stack[_STK].getString(), len);
|
||||
|
||||
stack[_STK - 1].setStringRef(concat, len);
|
||||
_STK--;
|
||||
break;
|
||||
}
|
||||
|
||||
case OP_COMPARE_STR:
|
||||
stack[_STK - 1].setBool(!dStricmp(stack[_STK].getString(), stack[_STK - 1].getString()));
|
||||
|
|
|
|||
|
|
@ -46,31 +46,21 @@
|
|||
extern StringStack STR;
|
||||
extern ConsoleValueStack<4096> gCallStack;
|
||||
|
||||
S32 ConsoleValue::sBufferOffset = 0;
|
||||
char ConsoleValue::sConversionBuffer[ConversionBufferSize];
|
||||
|
||||
void ConsoleValue::init()
|
||||
{
|
||||
sBufferOffset = 0;
|
||||
dMemset(sConversionBuffer, '\0', ConversionBufferSize);
|
||||
}
|
||||
|
||||
char* ConsoleValue::convertToBuffer() const
|
||||
{
|
||||
sBufferOffset += StringSize;
|
||||
if (sBufferOffset > ConversionBufferSize)
|
||||
{
|
||||
dMemset(sConversionBuffer, '\0', ConversionBufferSize);
|
||||
sBufferOffset = 0;
|
||||
}
|
||||
|
||||
char* offset = sConversionBuffer + sBufferOffset;
|
||||
if (type == ConsoleValueType::cvFloat)
|
||||
dSprintf(offset, StringSize, "%.9g", f);
|
||||
dSprintf(sConversionBuffer, ConversionBufferSize, "%.9g", f);
|
||||
else
|
||||
dSprintf(offset, StringSize, "%lld", i);
|
||||
dSprintf(sConversionBuffer, ConversionBufferSize, "%lld", i);
|
||||
|
||||
return offset;
|
||||
return sConversionBuffer;
|
||||
}
|
||||
|
||||
const char* ConsoleValue::getConsoleData() const
|
||||
|
|
|
|||
|
|
@ -149,12 +149,10 @@ class ConsoleValue
|
|||
|
||||
enum Constants
|
||||
{
|
||||
ConversionBufferSize = 1024,
|
||||
StringSize = 16
|
||||
ConversionBufferSize = 32
|
||||
};
|
||||
|
||||
static char sConversionBuffer[ConversionBufferSize];
|
||||
static S32 sBufferOffset;
|
||||
|
||||
char* convertToBuffer() const;
|
||||
|
||||
|
|
@ -314,6 +312,13 @@ public:
|
|||
dStrcpy(s, val, static_cast<dsize_t>(len) + 1);
|
||||
}
|
||||
|
||||
TORQUE_FORCEINLINE void setStringRef(const char* ref, S32 len)
|
||||
{
|
||||
cleanupData();
|
||||
type = ConsoleValueType::cvString;
|
||||
s = const_cast<char*>(ref);
|
||||
}
|
||||
|
||||
TORQUE_FORCEINLINE void setBool(const bool val)
|
||||
{
|
||||
cleanupData();
|
||||
|
|
@ -361,7 +366,6 @@ public:
|
|||
}
|
||||
|
||||
static void init();
|
||||
static S32 getConstantBufferCount() { return (S32)ConversionBufferSize / StringSize; }
|
||||
};
|
||||
|
||||
// Transparently converts ConsoleValue[] to const char**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue