CLuaString will no longer depend on CInterfaceManager.

This commit is contained in:
dfighter1985 2012-05-20 00:59:31 +02:00
parent 14f5b3c6ae
commit fe6f5bb29a
4 changed files with 15 additions and 65 deletions

View file

@ -653,52 +653,3 @@ void CLuaEnumeration::next()
}
}
CLuaString::CLuaString(const char *value)
{
_LuaState = NULL;
nlassert(value);
_Ptr = NULL;
_Str = value;
}
inline CLuaState &CLuaString::getLua() const
{
if( _LuaState )
return *_LuaState;
CInterfaceManager *im = CInterfaceManager::getInstance();
nlassert(im);
_LuaState = im->getLuaState();
nlassert(_LuaState);
return *_LuaState;
}
inline void CLuaString::build() const
{
if (_Ptr &&_LuaState) return;
CLuaStackChecker lsc(&getLua());
getLua().push(_Str);
_Ptr = getLua().toString();
_InLua.pop(getLua());
}
const char *CLuaString::getPtr() const
{
build();
return _Ptr;
}
void CLuaString::pushOnStack() const
{
build();
_InLua.push();
}

View file

@ -246,42 +246,41 @@ private:
class CLuaString
{
public:
explicit CLuaString(const char *value = "");
const char *getPtr() const;
void pushOnStack() const;
operator const char *() const { return getPtr(); }
explicit CLuaString(const char *value = "")
{
nlassert( value != NULL );
_Str = value;
}
const std::string& getStr() const{ return _Str; }
private:
const char *_Str;
mutable const char *_Ptr;
std::string _Str;
mutable CLuaState::TRefPtr _LuaState; // ref ptr so that statics get rebuilt on lua restart
mutable CLuaObject _InLua;
CLuaState &getLua() const;
void build() const;
};
inline bool operator==(const char* lh, const CLuaString& rh)
{
return std::string(lh) == std::string(rh.getPtr());
return std::string(lh) == rh.getStr();
}
inline bool operator==( const CLuaString& lh, const CLuaString& rh)
{
return std::string(lh.getPtr()) == std::string(rh.getPtr());
return lh.getStr() == rh.getStr();
}
inline bool operator==(const CLuaString& lh, const char* rh)
{
return std::string(rh) == std::string(lh.getPtr());
return std::string(rh) == lh.getStr();
}
inline bool operator==( const CLuaString& lh, const std::string& rh)
{
return std::string(lh.getPtr()) == rh;
return lh.getStr() == rh;
}
inline bool operator==(const std::string& lh, const CLuaString& rh)
{
return lh == std::string(rh.getPtr());
return lh == rh.getStr();
}
class CLuaHashMapTraits

View file

@ -76,10 +76,10 @@ void CDisplayerLua::CToLua::executeHandler(const CLuaString &eventName, int numA
CLuaStackRestorer lsr(&ls, ls.getTop() - numArgs);
//
if (!_LuaTable.isValid()) return; // init failed
if (_LuaTable[eventName].isNil()) return; // event not handled
if (_LuaTable[ eventName.getStr().c_str() ].isNil()) return; // event not handled
static volatile bool dumpStackWanted = false;
if (dumpStackWanted) ls.dumpStack();
_LuaTable[eventName].push();
_LuaTable[ eventName.getStr().c_str() ].push();
if (dumpStackWanted) ls.dumpStack();
// put method before its args
ls.insert(- numArgs - 1);

View file

@ -620,7 +620,7 @@ void CInstance::CToLua::executeHandler(const CLuaString &name, int numArgs)
//
static volatile bool dumpStackWanted = false;
if (dumpStackWanted) ls.dumpStack();
_Class[name].push();
_Class[ name.getStr().c_str() ].push();
if (ls.isNil(-1)) return; // not handled
if (dumpStackWanted) ls.dumpStack();
// put method before its args