11#ifndef USSYMBOLTABLE_HPP
12#define USSYMBOLTABLE_HPP
21#include "UtMemoryDebug.hpp"
29template<
typename T,
int ARRAY_SIZE,
int GROW_SIZE = 10>
35 , mDynamicBuffer(nullptr)
41 mDynamicBuffer =
nullptr;
42 int arrayValuesToCopy = std::min(mSize, ARRAY_SIZE);
43 std::copy(&aRhs.mArray[0], &aRhs.mArray[0] + arrayValuesToCopy, &mArray[0]);
44 if (aRhs.mDynamicBuffer && mSize > ARRAY_SIZE)
46 mDynamicBuffer =
new T[mSize - ARRAY_SIZE];
47 std::copy(aRhs.mDynamicBuffer, aRhs.mDynamicBuffer + mSize - ARRAY_SIZE, mDynamicBuffer);
55 if (mSize < ARRAY_SIZE)
57 delete mDynamicBuffer;
58 mDynamicBuffer =
nullptr;
62 if (((mSize - ARRAY_SIZE) % GROW_SIZE) != ((aSize - ARRAY_SIZE) % GROW_SIZE))
64 int newMemSize = ((aSize - ARRAY_SIZE + GROW_SIZE - 1) / GROW_SIZE) * GROW_SIZE;
65 T* newBuf =
new T[newMemSize];
68 for (
int i = ARRAY_SIZE; i < mSize; ++i)
70 newBuf[i - ARRAY_SIZE] = mDynamicBuffer[i - ARRAY_SIZE];
72 delete[] mDynamicBuffer;
74 mDynamicBuffer = newBuf;
86 return mDynamicBuffer[i - ARRAY_SIZE];
95 return mDynamicBuffer[i - ARRAY_SIZE];
105 int size()
const {
return mSize; }
109 T mArray[ARRAY_SIZE];
130 int SpecializeType(
int aThisType, std::pair<UsType*, UsType*> aArgs,
int aType);
131 void Specialize(
int aThisType,
const std::pair<UsType*, UsType*>& aTempArgs);
154 const char*
GetString(
const char* aString);
160 std::string& aBaseName,
161 std::string& aTemplateArg1,
162 std::string& aTemplateArg2);
169 typedef std::set<const char*, wizard::UtilCStringCompare>
StrMap;
178 typedef std::map<const char*, int, wizard::UtilCStringCompare>
NameMap;
262 typedef std::multimap<const char*, UsFunction, wizard::UtilCStringCompare>
MethodMap;
273 using VarMap = std::map<std::string, UsType*>;
333 std::vector<UsSymbolTable*> mSymbolTables;
340 UsSymbolTable(
const UsSymbolTable& aRhs);
341 UsSymbolTable& operator=(
const UsSymbolTable& aRhs);
372 mPoolPtr->mSymbolTables.push_back(
this);
377 UsSymbol*
Search(
const std::string& aName,
int aDepth = 1,
int aSequenceNumberLimit = 0x7fffffff);
@ cMDB_UsSymbolTable
Definition ViMemoryDebugMarkers.hpp:21
@ cMDB_UsTypeList
Definition ViMemoryDebugMarkers.hpp:20
Definition UsSymbolTable.hpp:31
~DynamicArray()
Definition UsSymbolTable.hpp:50
T & operator[](int i)
Definition UsSymbolTable.hpp:80
void resize(int aSize)
Definition UsSymbolTable.hpp:51
const T & operator[](size_t i) const
Definition UsSymbolTable.hpp:97
DynamicArray(const DynamicArray< T, ARRAY_SIZE > &aRhs)
Definition UsSymbolTable.hpp:38
DynamicArray()
Definition UsSymbolTable.hpp:33
int size() const
Definition UsSymbolTable.hpp:105
T & operator[](size_t i)
Definition UsSymbolTable.hpp:88
void push_back(const T &aVal)
Definition UsSymbolTable.hpp:98
const T & operator[](int i) const
Definition UsSymbolTable.hpp:89
Definition UsSymbolTable.hpp:115
UsFunction()
Definition UsSymbolTable.hpp:117
int mReturnType
Definition UsSymbolTable.hpp:133
Flags
Definition UsSymbolTable.hpp:123
@ cVARARGS
Definition UsSymbolTable.hpp:126
@ cSTATIC
Definition UsSymbolTable.hpp:125
@ cAPP_METHOD
Definition UsSymbolTable.hpp:124
DynamicArray< int, 4 > mArgs
Definition UsSymbolTable.hpp:134
int SpecializeType(int aThisType, std::pair< UsType *, UsType * > aArgs, int aType)
Definition UsSymbolTable.cpp:17
void Specialize(int aThisType, const std::pair< UsType *, UsType * > &aTempArgs)
Definition UsSymbolTable.cpp:34
int mFlags
Definition UsSymbolTable.hpp:132
bool operator==(const UsFunction &aRhs) const
Definition UsSymbolTable.cpp:43
bool operator<(const UsFunction &aRhs) const
Definition UsSymbolTable.cpp:59
Definition UsSymbolTable.hpp:326
friend class UsSymbolTable
Definition UsSymbolTable.hpp:328
~UsSymbolTablePool()
Definition UsSymbolTable.cpp:592
UsSymbolTablePool()
Definition UsSymbolTable.hpp:329
Definition UsSymbolTable.hpp:339
TableLinkage
Definition UsSymbolTable.hpp:347
@ cNEW_SCOPE
Definition UsSymbolTable.hpp:356
@ cADD_DEPTH_FLAG
Definition UsSymbolTable.hpp:349
@ cTRANSPARENT_COPY
Definition UsSymbolTable.hpp:352
@ cLOCAL_SCOPE
Definition UsSymbolTable.hpp:354
@ cOPEN_NEW_SCOPE
Definition UsSymbolTable.hpp:348
UsSymbolTable * GetParent() const
Definition UsSymbolTable.hpp:382
UsSymbol * SearchTransCopy(const std::string &aName, int aSequenceNumberLimit=0x7fffffff)
Definition UsSymbolTable.cpp:227
UsSymbolTable * AddInner(TableLinkage aLinkage)
Definition UsSymbolTable.cpp:187
UsSymbolTable * GetParentScope()
Definition UsSymbolTable.hpp:380
void AddOuter(TableLinkage aLinkage, UsSymbolTable *aSymbolTablePtr)
Definition UsSymbolTable.cpp:195
bool IsInheriting(UsSymbolTable *aParent)
Definition UsSymbolTable.hpp:389
UsSymbolTable(UsSymbolTablePool *aPoolPtr)
Definition UsSymbolTable.hpp:369
std::map< std::string, UsSymbol > EntryMap
Definition UsSymbolTable.hpp:402
UsType * mThisTypePtr
Definition UsSymbolTable.hpp:406
std::vector< TableLink > mInnerScopes
Definition UsSymbolTable.hpp:400
UsSymbol * Search(const std::string &aName, int aDepth=1, int aSequenceNumberLimit=0x7fffffff)
Definition UsSymbolTable.cpp:204
UsSymbolTablePool * mPoolPtr
Definition UsSymbolTable.hpp:408
UT_MEMORY_DEBUG_MARKER(cMDB_UsSymbolTable)
EntryMap mEntries
Definition UsSymbolTable.hpp:403
std::vector< TableLink > mOuterScopes
Definition UsSymbolTable.hpp:398
Definition UsSymbolTable.hpp:281
unsigned char mStorageType
Definition UsSymbolTable.hpp:315
std::string mName
Definition UsSymbolTable.hpp:311
unsigned char mEntryType
Definition UsSymbolTable.hpp:313
int mSequenceNumber
Definition UsSymbolTable.hpp:321
StorageType
Definition UsSymbolTable.hpp:294
@ cSE_STATIC
Definition UsSymbolTable.hpp:299
@ cSE_EXTERN
Definition UsSymbolTable.hpp:300
@ cSE_PARAMETER
Definition UsSymbolTable.hpp:297
@ cSE_NOT_APPLICABLE
Definition UsSymbolTable.hpp:295
@ cSE_GLOBAL
Definition UsSymbolTable.hpp:298
@ cSE_AUTOMATIC
Definition UsSymbolTable.hpp:296
EntryType
Definition UsSymbolTable.hpp:284
@ cSE_SCRIPT
Definition UsSymbolTable.hpp:288
@ cSE_FUNCTION
Definition UsSymbolTable.hpp:286
@ cSE_APP_FUNCTION
Definition UsSymbolTable.hpp:287
@ cSE_VARIABLE
Definition UsSymbolTable.hpp:285
UsSymbolTable * mLexicalScopePtr
Definition UsSymbolTable.hpp:308
UsSymbolTable * mTablePtr
Definition UsSymbolTable.hpp:305
bool IsPrototype() const
Definition UsSymbolTable.hpp:303
int mRTypeId
Definition UsSymbolTable.hpp:319
unsigned short mPosition
Definition UsSymbolTable.hpp:317
Definition UsSymbolTable.hpp:139
UsType * mSetBase
Definition UsSymbolTable.hpp:186
std::map< const char *, int, wizard::UtilCStringCompare > NameMap
Definition UsSymbolTable.hpp:178
std::map< UsFunction, int > PrototypeMap
Definition UsSymbolTable.hpp:170
UsType * FindType(const std::string &aTypeName)
Definition UsSymbolTable.cpp:250
UsTypeList()
Definition UsSymbolTable.cpp:558
~UsTypeList()
Definition UsSymbolTable.cpp:564
UsType * mArrayBase
Definition UsSymbolTable.hpp:187
std::string GetTypeName(int aTypeId)
Definition UsSymbolTable.cpp:510
void AddType(const std::string &aTypeName, UsType *aType)
Definition UsSymbolTable.cpp:431
static int SplitTemplateType(const std::string &aTypeName, std::string &aBaseName, std::string &aTemplateArg1, std::string &aTemplateArg2)
Definition UsSymbolTable.cpp:265
UsType * mMapBase
Definition UsSymbolTable.hpp:185
StrMap mStrings
Definition UsSymbolTable.hpp:196
std::string GetFunctionPrototype(const std::string &aName, const UsFunction &aFunction)
Definition UsSymbolTable.cpp:576
const char * GetString(const char *aString)
Definition UsSymbolTable.cpp:541
std::set< const char *, wizard::UtilCStringCompare > StrMap
Definition UsSymbolTable.hpp:169
UsType * GetType(int aTypeId)
Definition UsSymbolTable.cpp:440
TemplateTypeMap mTemplateTypes
Definition UsSymbolTable.hpp:184
UT_MEMORY_DEBUG_MARKER(cMDB_UsTypeList)
std::vector< const UsFunction * > mPrototypes
Definition UsSymbolTable.hpp:190
std::pair< UsType *, UsType * > GetTemplateArgs(TemplateArgs aArgs)
Definition UsSymbolTable.cpp:497
NameMap mNameMap
Definition UsSymbolTable.hpp:179
static const int cPROTOTYPE_ID_START
Definition UsSymbolTable.hpp:175
std::pair< int, int > TemplateArgs
Definition UsSymbolTable.hpp:141
const UsFunction * GetPrototype(int aId)
Definition UsSymbolTable.cpp:516
UsType * FindTypeOrMakeTemplate(const std::string &aTypeName)
Definition UsSymbolTable.cpp:343
std::pair< int, TemplateArgs > TemplateType
Definition UsSymbolTable.hpp:142
std::vector< UsType * > mTypes
Definition UsSymbolTable.hpp:182
int AddPrototype(const UsFunction &aPrototype)
Definition UsSymbolTable.cpp:525
PrototypeMap mPrototypeMap
Definition UsSymbolTable.hpp:192
std::map< TemplateType, UsType * > TemplateTypeMap
Definition UsSymbolTable.hpp:143
Definition UsSymbolTable.hpp:202
UsType(UsTypeList *aTypes)
Definition UsSymbolTable.hpp:212
void AddInheritedType(int aTypeId)
Definition UsSymbolTable.hpp:227
bool IsExplicitlyCastable(int aTypeId) const
Definition UsSymbolTable.cpp:106
MethodMap mMethods
Definition UsSymbolTable.hpp:265
void ReSpecialize(UsType *aTemplateBase)
Definition UsSymbolTable.cpp:626
std::vector< int > mExplicitCastTypes
Definition UsSymbolTable.hpp:271
Flags
Definition UsSymbolTable.hpp:205
@ cEQUALITY_COMPARABLE
Definition UsSymbolTable.hpp:210
@ cCLONEABLE
Definition UsSymbolTable.hpp:207
@ cLESS_THAN_COMPARABLE
Definition UsSymbolTable.hpp:209
@ cCONSTRUCTIBLE
Definition UsSymbolTable.hpp:206
@ cCONTAINER
Definition UsSymbolTable.hpp:208
std::map< std::string, UsType * > VarMap
Definition UsSymbolTable.hpp:273
bool IsImplicitlyCastable(int aTypeId) const
Definition UsSymbolTable.cpp:102
std::pair< UsType *, UsType * > mTemplateArgs
Definition UsSymbolTable.hpp:260
std::string mName
Definition UsSymbolTable.hpp:258
int mFlags
Definition UsSymbolTable.hpp:257
bool HasStaticMethod(const char *aName)
Definition UsSymbolTable.cpp:121
UsType * Specialize(std::pair< UsType *, UsType * > aTemplateArgs) const
Definition UsSymbolTable.cpp:600
std::multimap< const char *, UsFunction, wizard::UtilCStringCompare > MethodMap
Definition UsSymbolTable.hpp:262
void AddImplicitCastType(int aTypeId)
Definition UsSymbolTable.hpp:237
UsFunction * FindMethod(const char *aName, std::vector< int > &aArgTypes)
Definition UsSymbolTable.cpp:136
bool HasMethod(const char *aName, const UsFunction &aFunc) const
Definition UsSymbolTable.cpp:635
UsTypeList * mTypeList
Definition UsSymbolTable.hpp:253
VarMap mVariables
Definition UsSymbolTable.hpp:274
int Id() const
Definition UsSymbolTable.hpp:220
std::vector< int > mImplicitCastTypes
Definition UsSymbolTable.hpp:269
bool IsBaseType(int aTypeId) const
Definition UsSymbolTable.cpp:110
void AddExplicitCastType(int aTypeId)
Definition UsSymbolTable.hpp:244
std::vector< int > mInheritedTypes
Definition UsSymbolTable.hpp:267
int mTypeId
Definition UsSymbolTable.hpp:255
UsSymbolTable * mTablePtr
Definition UsSymbolTable.hpp:365
TableLinkage mLinkage
Definition UsSymbolTable.hpp:366
TableLink(UsSymbolTable *aTablePtr, TableLinkage aLinkage)
Definition UsSymbolTable.hpp:360
UsValRef(UsType *aObjectTypePtr, const char *aFunctionNamePtr)
Definition UsSymbolTable.hpp:426
UsType * mFunctionTypePtr
Definition UsSymbolTable.hpp:451
bool operator<(const UsValRef &aRhs) const
Definition UsSymbolTable.hpp:436
UsValRef()
Definition UsSymbolTable.hpp:416
bool operator==(const UsValRef &aRhs) const
Definition UsSymbolTable.hpp:432
bool IsNull() const
Definition UsSymbolTable.hpp:431
const char * mFunctionNamePtr
Definition UsSymbolTable.hpp:453
UsSymbol * mSymbolPtr
Definition UsSymbolTable.hpp:450
UsValRef(UsSymbol *aSymPtr)
Definition UsSymbolTable.hpp:421