mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2025-02-21 20:27:13 +01:00
Add function to retrieve command listeners associated with a certain manager as array or table and also to iterate them with a callback. Should close #19
This commit is contained in:
parent
1d5b12f11f
commit
463dc75d91
@ -1082,6 +1082,9 @@ void Register(HSQUIRRELVM vm)
|
|||||||
.Func(_SC("FindByName"), &Manager::FindByName)
|
.Func(_SC("FindByName"), &Manager::FindByName)
|
||||||
.Func(_SC("BindOnFail"), &Manager::SetOnFail)
|
.Func(_SC("BindOnFail"), &Manager::SetOnFail)
|
||||||
.Func(_SC("BindOnAuth"), &Manager::SetOnAuth)
|
.Func(_SC("BindOnAuth"), &Manager::SetOnAuth)
|
||||||
|
.Func(_SC("GetArray"), &Manager::GetCommandsArray)
|
||||||
|
.Func(_SC("GetTable"), &Manager::GetCommandsTable)
|
||||||
|
.Func(_SC("Foreach"), &Manager::ForeachCommand)
|
||||||
// Member Overloads
|
// Member Overloads
|
||||||
.Overload< Object (Manager::*)(CSStr) >(_SC("Create"), &Manager::Create)
|
.Overload< Object (Manager::*)(CSStr) >(_SC("Create"), &Manager::Create)
|
||||||
.Overload< Object (Manager::*)(CSStr, CSStr) >(_SC("Create"), &Manager::Create)
|
.Overload< Object (Manager::*)(CSStr, CSStr) >(_SC("Create"), &Manager::Create)
|
||||||
|
@ -703,6 +703,57 @@ public:
|
|||||||
// Return the requested information
|
// Return the requested information
|
||||||
return m_Context->mArgument;
|
return m_Context->mArgument;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------
|
||||||
|
* Retrieve all command listeners in an array.
|
||||||
|
*/
|
||||||
|
Array GetCommandsArray() const
|
||||||
|
{
|
||||||
|
// Allocate an array with an adequate size
|
||||||
|
Array arr(DefaultVM::Get(), m_Commands.size());
|
||||||
|
// Index of the currently processed command listener
|
||||||
|
SQInteger index = 0;
|
||||||
|
// Populate the array with the command listeners
|
||||||
|
for (const auto & cmd : m_Commands)
|
||||||
|
{
|
||||||
|
arr.SetValue(index++, cmd.mObj);
|
||||||
|
}
|
||||||
|
// Return the resulted array
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------
|
||||||
|
* Retrieve all command listeners in a table.
|
||||||
|
*/
|
||||||
|
Table GetCommandsTable() const
|
||||||
|
{
|
||||||
|
// Allocate an empty table
|
||||||
|
Table tbl(DefaultVM::Get());
|
||||||
|
// Populate the table with the command listeners
|
||||||
|
for (const auto & cmd : m_Commands)
|
||||||
|
{
|
||||||
|
tbl.SetValue(cmd.mName.c_str(), cmd.mObj);
|
||||||
|
}
|
||||||
|
// Return the resulted table
|
||||||
|
return tbl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------
|
||||||
|
* Process all command listeners with a function.
|
||||||
|
*/
|
||||||
|
void ForeachCommand(Function & func) const
|
||||||
|
{
|
||||||
|
// Make sure that the specified function works
|
||||||
|
if (func.IsNull())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Process all the managed command listeners
|
||||||
|
for (const auto & cmd : m_Commands)
|
||||||
|
{
|
||||||
|
func.Execute(cmd.mObj);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------------------------------
|
/* ------------------------------------------------------------------------------------------------
|
||||||
@ -928,6 +979,38 @@ public:
|
|||||||
return GetValid()->GetArgument();
|
return GetValid()->GetArgument();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------
|
||||||
|
* Retrieve all command listeners in an array.
|
||||||
|
*/
|
||||||
|
Array GetCommandsArray() const
|
||||||
|
{
|
||||||
|
return GetValid()->GetCommandsArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------
|
||||||
|
* Retrieve all command listeners in a table.
|
||||||
|
*/
|
||||||
|
Table GetCommandsTable() const
|
||||||
|
{
|
||||||
|
return GetValid()->GetCommandsTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------
|
||||||
|
* Process all command listeners with a function.
|
||||||
|
*/
|
||||||
|
void ForeachCommand(Object & env, Function & func) const
|
||||||
|
{
|
||||||
|
if (env.IsNull())
|
||||||
|
{
|
||||||
|
GetValid()->ForeachCommand(func);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Function fn(env.GetVM(), env, func.GetFunc());
|
||||||
|
GetValid()->ForeachCommand(fn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------------------------
|
||||||
* Create command instances and obtain the associated object.
|
* Create command instances and obtain the associated object.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user