Add cUUID class (#3871)

This commit is contained in:
peterbell10
2017-08-25 13:43:18 +01:00
committed by Alexander Harkness
parent 86d52c3e17
commit f4f2fc7c3d
54 changed files with 1339 additions and 508 deletions
+76
View File
@@ -20,6 +20,7 @@ extern "C"
#include "../Entities/Entity.h"
#include "../BlockEntities/BlockEntity.h"
#include "../DeadlockDetect.h"
#include "../UUID.h"
@@ -1410,6 +1411,40 @@ bool cLuaState::GetStackValue(int a_StackPos, float & a_ReturnedVal)
bool cLuaState::GetStackValue(int a_StackPos, cUUID & a_Value)
{
if (lua_isnil(m_LuaState, a_StackPos))
{
return false;
}
tolua_Error tolua_Err;
if (tolua_isusertype(m_LuaState, a_StackPos, "cUUID", 0, &tolua_Err))
{
// Found a cUUID, copy into output value
cUUID * PtrUUID = nullptr;
GetStackValue(a_StackPos, PtrUUID);
if (PtrUUID == nullptr)
{
return false;
}
a_Value = *PtrUUID;
return true;
}
// Try to get a string and parse as a UUID into the output
AString StrUUID;
if (!GetStackValue(a_StackPos, StrUUID))
{
return false;
}
return a_Value.FromString(StrUUID);
}
cLuaState::cStackValue cLuaState::WalkToValue(const AString & a_Name)
{
// There needs to be at least one value on the stack:
@@ -1785,6 +1820,47 @@ bool cLuaState::CheckParamFunctionOrNil(int a_StartParam, int a_EndParam)
bool cLuaState::CheckParamUUID(int a_StartParam, int a_EndParam)
{
ASSERT(IsValid());
if (a_EndParam < 0)
{
a_EndParam = a_StartParam;
}
cUUID tempUUID;
AString tempStr;
// Accept either a cUUID or a string that contains a valid UUID
for (int i = a_StartParam; i <= a_EndParam; ++i)
{
tolua_Error err;
if (tolua_isusertype(m_LuaState, i, "cUUID", 0, &err) && !lua_isnil(m_LuaState, i))
{
continue;
}
if (!tolua_iscppstring(m_LuaState, i, 0, &err))
{
ApiParamError("Failed to read parameter #%d. UUID expected, got %s", i, GetTypeText(i).c_str());
return false;
}
// Check string is a valid UUID
GetStackValue(i, tempStr);
if (!tempUUID.FromString(tempStr))
{
ApiParamError("Failed to read parameter #%d. UUID expected, got non-UUID string:\n\t\"%s\"", i, tempStr.c_str());
return false;
}
}
return true;
}
bool cLuaState::CheckParamEnd(int a_Param)
{
tolua_Error tolua_err;