mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
Merge pull request #786 from JeffProgrammer/ts_conversion_buffer_allocator
Better allocator for TorqueScript temp conversions during interpretation
This commit is contained in:
commit
7984777336
|
|
@ -46,29 +46,28 @@
|
|||
extern StringStack STR;
|
||||
extern ConsoleValueStack<4096> gCallStack;
|
||||
|
||||
Vector<ConsoleValue::ConversionBuffer> ConsoleValue::sConversionBuffer;
|
||||
DataChunker ConsoleValue::sConversionAllocator;
|
||||
|
||||
void ConsoleValue::init()
|
||||
{
|
||||
sConversionBuffer.reserve(8192);
|
||||
sConversionAllocator.setChunkSize(8092);
|
||||
}
|
||||
|
||||
void ConsoleValue::resetConversionBuffer()
|
||||
{
|
||||
sConversionBuffer.resetAndTreatAsScratchBuffer();
|
||||
sConversionAllocator.freeBlocks();
|
||||
}
|
||||
|
||||
char* ConsoleValue::convertToBuffer() const
|
||||
{
|
||||
ConversionBuffer conversion;
|
||||
char* buffer = static_cast<char*>(sConversionAllocator.alloc(32));
|
||||
|
||||
if (type == ConsoleValueType::cvFloat)
|
||||
dSprintf(conversion.buffer, ConversionBufferStride, "%.9g", f);
|
||||
dSprintf(buffer, 32, "%.9g", f);
|
||||
else
|
||||
dSprintf(conversion.buffer, ConversionBufferStride, "%lld", i);
|
||||
dSprintf(buffer, 32, "%lld", i);
|
||||
|
||||
sConversionBuffer.push_back(std::move(conversion));
|
||||
return sConversionBuffer.last().buffer;
|
||||
return buffer;
|
||||
}
|
||||
|
||||
const char* ConsoleValue::getConsoleData() const
|
||||
|
|
|
|||
|
|
@ -146,17 +146,7 @@ class ConsoleValue
|
|||
|
||||
S32 type;
|
||||
|
||||
enum Constants
|
||||
{
|
||||
ConversionBufferStride = 32
|
||||
};
|
||||
|
||||
struct ConversionBuffer
|
||||
{
|
||||
char buffer[ConversionBufferStride];
|
||||
};
|
||||
|
||||
static Vector<ConversionBuffer> sConversionBuffer;
|
||||
static DataChunker sConversionAllocator;
|
||||
|
||||
char* convertToBuffer() const;
|
||||
|
||||
|
|
|
|||
|
|
@ -160,7 +160,6 @@ class Vector
|
|||
void erase(U32 index, U32 count);
|
||||
void erase_fast(iterator);
|
||||
void clear();
|
||||
void resetAndTreatAsScratchBuffer();
|
||||
void compact();
|
||||
void sort(compare_func f);
|
||||
void fill( const T& value );
|
||||
|
|
@ -530,15 +529,6 @@ template<class T> inline void Vector<T>::clear()
|
|||
mElementCount = 0;
|
||||
}
|
||||
|
||||
/// This method sets the vector as its 0 and will overwrite memory on subsequent usage.
|
||||
/// Note that the current memory in use is never freed or deallocated, so only use this if the vector
|
||||
/// is being used as a scratch buffer only.
|
||||
template<class T> inline
|
||||
void Vector<T>::resetAndTreatAsScratchBuffer()
|
||||
{
|
||||
mElementCount = 0;
|
||||
}
|
||||
|
||||
template<class T> inline void Vector<T>::compact()
|
||||
{
|
||||
resize(mElementCount);
|
||||
|
|
|
|||
Loading…
Reference in a new issue