AngelScript
any object

Path: /sdk/add_on/scriptany/

The any type is a generic container that can hold any value. It is a reference type.

The type is registered with RegisterScriptAny(asIScriptEngine*).

Public C++ interface

class CScriptAny
{
public:
// Constructors
CScriptAny(asIScriptEngine *engine);
CScriptAny(void *ref, int refTypeId, asIScriptEngine *engine);
// Memory management
int AddRef() const;
int Release() const;
// Copy the stored value from another any object
CScriptAny &operator=(const CScriptAny&);
int CopyFrom(const CScriptAny *other);
// Store the value, either as variable type, integer number, or real number
void Store(void *ref, int refTypeId);
void Store(asINT64 &value);
void Store(double &value);
// Retrieve the stored value, either as variable type, integer number, or real number
bool Retrieve(void *ref, int refTypeId) const;
bool Retrieve(asINT64 &value) const;
bool Retrieve(double &value) const;
// Get the type id of the stored value
int GetTypeId() const;
};

Public script interface

  class any
  {
    any();
    any(? &in value);
    void store(? &in value);
    void store(int64 &in value);
    void store(double &in value);
    bool retrieve(? &out value) const;
    bool retrieve(int64 &out value) const;
    bool retrieve(double &out value) const;
  }

Example usage

In the scripts it can be used as follows:

  int value;
  obj object;
  obj @handle;
  any a,b,c;
  a.store(value);      // store the value
  b.store(@handle);    // store an object handle
  c.store(object);     // store a copy of the object
  a.retrieve(value);   // retrieve the value
  b.retrieve(@handle); // retrieve the object handle
  c.retrieve(object);  // retrieve a copy of the object

In C++ the type can be used as follows:

CScriptAny *myAny;
int typeId = engine->GetTypeIdByDecl("string@");
CScriptString *str = new CScriptString("hello world");
myAny->Store((void*)&str, typeId);
myAny->Retrieve((void*)&str, typeId);