Get Argument Helpers

GetArgument

/*
    Gets a non heap object from arguments
    Returns true if argument is of type T and index < args.size()
    obj is set to the args[index] if it returns true
*/
template<typename T>
bool GetArgument(std::vector<TObject>& args, size_t index, T& obj);
//Heres it in code
static TObject My_Custom(GCList& ls, std::vector<TObject> args)
{
    int64_t n;
    if(GetArgument(args,0,n))
    {
        return n + 5;
    }
    return (int64_t)5;
}

GetArgumentHeap

/*
    Gets a heap object from arguments
    Returns true if argument is of type T and index < args.size()
    obj is set to the args[index] if it returns true
*/
template<typename T>
bool GetArgumentHeap(std::vector<TObject>& args, size_t index, T& obj);
//Heres it in code
static TObject My_Custom(GCList& ls, std::vector<TObject> args)
{
    TList* list;
    if(GetArgumentHeap(args,0,list))
    {
        list->Add((std::string)"Hello, world");
    }
    return nullptr;
}
```c++

/*
    Gets a non heap object from src
    Returns true if argument is of type T
    obj is set to src if it returns true
*/
template<typename T>
bool GetObject(TObject& src, T& obj);
//Heres it in code
static TObject My_Custom(GCList& ls, std::vector<TObject> args)
{
    int64_t n;
    TDictionary* dict;
    if(GetArgumentHeap(args,0,dict))
    {
        auto item = dict->GetValue("MyItem");
        if(GetObject(item, n))
            return n + 5;
    }
    return (int64_t)5;
}

GetArgumentHeap

/*
    Gets a heap object from src
    Returns true if argument is of type T
    obj is set to src if it returns true
*/
template<typename T>
bool GetObjectHeap(TObject& src, T& obj);
//Heres it in code
static void My_Custom(TObject something)
{
    TList* ls;
    if(GetObjectHeap(something, ls))
    {
        ls->Add((int64_t)42);
    }
}