📄 macromanager.cc
字号:
/*////////////////////////////////////////////////////////////////////////////////
宏管理
在进行lex分析时,进行宏单词管理
#macro name value
#unmacro name
李亦
2006.06.8
/*////////////////////////////////////////////////////////////////////////////////
#include "console/macroManager.h"
MacroDictionary gMacroDictionary;
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
MacroDictionary::MacroDictionary()
{
// hashTable = NULL;
mutex = Mutex::createMutex();
}
MacroDictionary::~MacroDictionary()
{
Mutex::destroyMutex(mutex);
}
void MacroDictionary::begin(StringTableEntry name)
{
m_pReadyField = name;//StringTable->insert(name);
}
void MacroDictionary::end(StringTableEntry value)
{
insert(m_pReadyField, value);
}
void MacroDictionary::insert(StringTableEntry pName, StringTableEntry pValue)
{
if(!pName || pName[0]==0)
return;
if(!pValue || pValue[0]==0)
{
remove(pName);
return;
}
Mutex::lockMutex(mutex);
//pName = StringTable->insert(pName,true);
//pValue = StringTable->insert(pValue);
S32 nIndex = search(pName);
if(nIndex == -1)
{
MacroField mf;
mf.pName = pName;
mf.pValue = pValue;
m_arHashTable.push_back(mf);
}
else
{
m_arHashTable[nIndex].pValue = pValue;
}
Mutex::unlockMutex(mutex);
}
S32 MacroDictionary::search(StringTableEntry name)
{
for(U32 n=0; n<m_arHashTable.size(); n++)
if(m_arHashTable[n].pName == name)
return n;
return -1;
}
StringTableEntry MacroDictionary::find(StringTableEntry pName)
{
Mutex::lockMutex(mutex);
S32 nIndex = search(pName);
if(nIndex != -1)
return m_arHashTable[nIndex].pValue;
return 0;
}
void MacroDictionary::remove(StringTableEntry pName)
{
if(!pName || pName[0]==0)
return;
Mutex::lockMutex(mutex);
S32 nIndex = search(pName);
if(nIndex != -1)
m_arHashTable.erase(nIndex);
Mutex::unlockMutex(mutex);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -