Skip to content

Commit ca791c4

Browse files
committed
Add CScriptArgReader::ReadStringMap
1 parent 546d573 commit ca791c4

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

Shared/sdk/CScriptArgReader.h

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,42 @@ class CScriptArgReader
987987
}
988988

989989

990+
//
991+
// Reads a table as key-value string pair
992+
//
993+
void ReadStringMap(std::unordered_map<SString, SString>& outMap, bool defaultEmpty = false)
994+
{
995+
outMap.clear();
996+
997+
int argument = lua_type(m_luaVM, m_iIndex);
998+
if (argument == LUA_TTABLE)
999+
{
1000+
lua_pushnil(m_luaVM);
1001+
while (lua_next(m_luaVM, m_iIndex) != 0)
1002+
{
1003+
int keyType = lua_type(m_luaVM, -2);
1004+
int valueType = lua_type(m_luaVM, -1);
1005+
1006+
if (keyType == LUA_TSTRING && (valueType == LUA_TSTRING || valueType == LUA_TNUMBER))
1007+
{
1008+
outMap.insert({ lua_tostring(m_luaVM, -2), lua_tostring(m_luaVM, -1) });
1009+
lua_pop(m_luaVM, 1);
1010+
}
1011+
}
1012+
++m_iIndex;
1013+
return;
1014+
}
1015+
else if (defaultEmpty && (argument == LUA_TNONE || argument == LUA_TNIL))
1016+
{
1017+
++m_iIndex;
1018+
return;
1019+
}
1020+
1021+
SetTypeError("table");
1022+
++m_iIndex;
1023+
}
1024+
1025+
9901026
//
9911027
// Read a function, but don't do it yet due to Lua stack issues
9921028
//

0 commit comments

Comments
 (0)