mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-15 16:44:36 +00:00
changes from az
leak damn near fixed with these changes
This commit is contained in:
parent
ee0cf872a0
commit
5fc9da789b
1 changed files with 66 additions and 56 deletions
|
|
@ -37,6 +37,7 @@
|
||||||
#include "core/util/str.h"
|
#include "core/util/str.h"
|
||||||
#include "core/util/journal/journaledSignal.h"
|
#include "core/util/journal/journaledSignal.h"
|
||||||
#include "core/stringTable.h"
|
#include "core/stringTable.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
class SimObject;
|
class SimObject;
|
||||||
class Namespace;
|
class Namespace;
|
||||||
|
|
@ -119,6 +120,7 @@ typedef const char *StringTableEntry;
|
||||||
|
|
||||||
enum ConsoleValueType
|
enum ConsoleValueType
|
||||||
{
|
{
|
||||||
|
cvNULL = -5,
|
||||||
cvInteger = -4,
|
cvInteger = -4,
|
||||||
cvFloat = -3,
|
cvFloat = -3,
|
||||||
cvString = -2,
|
cvString = -2,
|
||||||
|
|
@ -152,7 +154,7 @@ class ConsoleValue
|
||||||
|
|
||||||
TORQUE_FORCEINLINE bool hasAllocatedData() const
|
TORQUE_FORCEINLINE bool hasAllocatedData() const
|
||||||
{
|
{
|
||||||
return (type == ConsoleValueType::cvString || isConsoleType()) && data != NULL;
|
return (isConsoleType() && data != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* getConsoleData() const;
|
const char* getConsoleData() const;
|
||||||
|
|
@ -164,34 +166,40 @@ class ConsoleValue
|
||||||
dFree(data);
|
dFree(data);
|
||||||
data = NULL;
|
data = NULL;
|
||||||
}
|
}
|
||||||
|
else if (type == ConsoleValueType::cvString)
|
||||||
|
{
|
||||||
|
if (s && s[0])
|
||||||
|
dFree(s);
|
||||||
|
}
|
||||||
|
type = ConsoleValueType::cvNULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
TORQUE_FORCEINLINE void _move(ConsoleValue&& ref) noexcept
|
TORQUE_FORCEINLINE void _move(ConsoleValue&& ref) noexcept
|
||||||
{
|
{
|
||||||
type = ref.type;
|
if (ref.type == ConsoleValueType::cvNULL)
|
||||||
|
{
|
||||||
|
std::cout << "Cannot Move a variable twice!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
switch (ref.type)
|
switch (ref.type)
|
||||||
{
|
{
|
||||||
case cvInteger:
|
case cvInteger:
|
||||||
i = ref.i;
|
setInt(ref.i);
|
||||||
break;
|
break;
|
||||||
case cvFloat:
|
case cvFloat:
|
||||||
f = ref.f;
|
setFloat(ref.f);
|
||||||
break;
|
break;
|
||||||
case cvSTEntry:
|
case cvSTEntry:
|
||||||
TORQUE_CASE_FALLTHROUGH;
|
setStringTableEntry(ref.s);
|
||||||
|
break;
|
||||||
case cvString:
|
case cvString:
|
||||||
s = ref.s;
|
setString(ref.s);
|
||||||
ref.s = const_cast<char*>(StringTable->EmptyString());
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
data = ref.data;
|
setConsoleData(ref.ct->consoleType, ref.ct->dataPtr, ref.ct->enumTable);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ref.type = ConsoleValueType::cvSTEntry;
|
ref.cleanupData();
|
||||||
ref.data = NULL;
|
|
||||||
//ref.reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
@ -203,106 +211,109 @@ public:
|
||||||
|
|
||||||
ConsoleValue(ConsoleValue&& ref) noexcept
|
ConsoleValue(ConsoleValue&& ref) noexcept
|
||||||
{
|
{
|
||||||
type = ref.type;
|
if (ref.type == ConsoleValueType::cvNULL)
|
||||||
|
{
|
||||||
|
std::cout << "Cannot Move a variable twice!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
switch (ref.type)
|
switch (ref.type)
|
||||||
{
|
{
|
||||||
case cvInteger:
|
case cvInteger:
|
||||||
i = ref.i;
|
setInt(ref.i);
|
||||||
break;
|
break;
|
||||||
case cvFloat:
|
case cvFloat:
|
||||||
f = ref.f;
|
setFloat(ref.f);
|
||||||
break;
|
break;
|
||||||
case cvSTEntry:
|
case cvSTEntry:
|
||||||
TORQUE_CASE_FALLTHROUGH;
|
setStringTableEntry(ref.s);
|
||||||
|
break;
|
||||||
case cvString:
|
case cvString:
|
||||||
s = ref.s;
|
setString(ref.s);
|
||||||
ref.s = const_cast<char*>(StringTable->EmptyString());
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
data = ref.data;
|
setConsoleData(ref.ct->consoleType, ref.ct->dataPtr, ref.ct->enumTable);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ref.type = ConsoleValueType::cvSTEntry;
|
ref.cleanupData();
|
||||||
ref.data = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TORQUE_FORCEINLINE ConsoleValue& operator=(ConsoleValue&& ref) noexcept
|
TORQUE_FORCEINLINE ConsoleValue& operator=(ConsoleValue&& ref) noexcept
|
||||||
{
|
{
|
||||||
type = ref.type;
|
if (ref.type == ConsoleValueType::cvNULL)
|
||||||
|
{
|
||||||
|
std::cout << "Cannot Move a variable twice!";
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
switch (ref.type)
|
switch (ref.type)
|
||||||
{
|
{
|
||||||
case cvInteger:
|
case cvInteger:
|
||||||
i = ref.i;
|
setInt(ref.i);
|
||||||
break;
|
break;
|
||||||
case cvFloat:
|
case cvFloat:
|
||||||
f = ref.f;
|
setFloat(ref.f);
|
||||||
break;
|
break;
|
||||||
case cvSTEntry:
|
case cvSTEntry:
|
||||||
TORQUE_CASE_FALLTHROUGH;
|
setStringTableEntry(ref.s);
|
||||||
|
break;
|
||||||
case cvString:
|
case cvString:
|
||||||
s = ref.s;
|
setString(ref.s);
|
||||||
ref.s = const_cast<char*>(StringTable->EmptyString());
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
data = ref.data;
|
setConsoleData(ref.ct->consoleType, ref.ct->dataPtr, ref.ct->enumTable);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ref.type = ConsoleValueType::cvSTEntry;
|
ref.cleanupData();
|
||||||
ref.data = NULL;
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
ConsoleValue(const ConsoleValue& ref)
|
ConsoleValue(const ConsoleValue& ref)
|
||||||
{
|
{
|
||||||
type = ref.type;
|
|
||||||
|
|
||||||
switch (ref.type)
|
switch (ref.type)
|
||||||
{
|
{
|
||||||
|
case cvNULL:
|
||||||
|
std::cout << "Ref already cleared!";
|
||||||
|
break;
|
||||||
case cvInteger:
|
case cvInteger:
|
||||||
i = ref.i;
|
setInt(ref.i);
|
||||||
break;
|
break;
|
||||||
case cvFloat:
|
case cvFloat:
|
||||||
f = ref.f;
|
setFloat(ref.f);
|
||||||
break;
|
break;
|
||||||
case cvSTEntry:
|
case cvSTEntry:
|
||||||
TORQUE_CASE_FALLTHROUGH;
|
setStringTableEntry(ref.s);
|
||||||
|
break;
|
||||||
case cvString:
|
case cvString:
|
||||||
s = ref.s;
|
setString(ref.s);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
data = ref.data;
|
setConsoleData(ref.ct->consoleType, ref.ct->dataPtr, ref.ct->enumTable);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ConsoleValue& operator=(const ConsoleValue& ref)
|
ConsoleValue& operator=(const ConsoleValue& ref)
|
||||||
{
|
{
|
||||||
type = ref.type;
|
|
||||||
|
|
||||||
switch (ref.type)
|
switch (ref.type)
|
||||||
{
|
{
|
||||||
|
case cvNULL:
|
||||||
|
std::cout << "Ref already cleared!";
|
||||||
|
break;
|
||||||
case cvInteger:
|
case cvInteger:
|
||||||
i = ref.i;
|
setInt(ref.i);
|
||||||
break;
|
break;
|
||||||
case cvFloat:
|
case cvFloat:
|
||||||
f = ref.f;
|
setFloat(ref.f);
|
||||||
break;
|
break;
|
||||||
case cvSTEntry:
|
case cvSTEntry:
|
||||||
TORQUE_CASE_FALLTHROUGH;
|
setStringTableEntry(ref.s);
|
||||||
|
break;
|
||||||
case cvString:
|
case cvString:
|
||||||
s = ref.s;
|
setString(ref.s);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
data = ref.data;
|
setConsoleData(ref.ct->consoleType, ref.ct->dataPtr, ref.ct->enumTable);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -396,12 +407,11 @@ public:
|
||||||
setEmptyString();
|
setEmptyString();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanupData();
|
cleanupData();
|
||||||
type = ConsoleValueType::cvString;
|
type = ConsoleValueType::cvString;
|
||||||
s = (char*)dMalloc(static_cast<dsize_t>(len) + 1);
|
s = (char*)dMalloc(len + 1);
|
||||||
s[len] = '\0';
|
s[len] = '\0';
|
||||||
dStrcpy(s, val, static_cast<dsize_t>(len) + 1);
|
dStrcpy(s, val, len + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
TORQUE_FORCEINLINE void setStringRef(const char* ref, S32 len)
|
TORQUE_FORCEINLINE void setStringRef(const char* ref, S32 len)
|
||||||
|
|
@ -420,7 +430,7 @@ public:
|
||||||
|
|
||||||
TORQUE_FORCEINLINE void setStringTableEntry(StringTableEntry val)
|
TORQUE_FORCEINLINE void setStringTableEntry(StringTableEntry val)
|
||||||
{
|
{
|
||||||
cleanupData();
|
//cleanupData();
|
||||||
type = ConsoleValueType::cvSTEntry;
|
type = ConsoleValueType::cvSTEntry;
|
||||||
s = const_cast<char*>(val);
|
s = const_cast<char*>(val);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue