AngelScript

dictionary object

Path: /sdk/add_on/scriptdictionary/

The dictionary object maps string values to values or objects of other types.

Register with `RegisterScriptDictionary(asIScriptEngine*)`.

Compile the add-on with the pre-processor define AS_USE_STLNAMES=1 to register the methods with the same names as used by C++ STL where the methods have the same significance. Not all methods from STL is implemented in the add-on, but many of the most frequent once are so a port from script to C++ and vice versa might be easier if STL names are used.

# Public C++ interface

class CScriptDictionary
{
public:
// Memory management
CScriptDictionary(asIScriptEngine *engine);
void AddRef() const;
void Release() const;
// Perform a shallow copy of the other dictionary
CScriptDictionary &operator=(const CScriptDictionary &other);
// Sets/Gets a variable type value for a key
void Set(const std::string &key, void *value, int typeId);
bool Get(const std::string &key, void *value, int typeId) const;
// Sets/Gets an integer number value for a key
void Set(const std::string &key, asINT64 &value);
bool Get(const std::string &key, asINT64 &value) const;
// Sets/Gets a real number value for a key
void Set(const std::string &key, double &value);
bool Get(const std::string &key, double &value) const;
// Get an array of all keys
CScriptArray *GetKeys() const;
// Returns true if the key is set
bool Exists(const std::string &key) const;
// Returns true if the dictionary is empty
bool IsEmpty() const;
// Returns the number of keys in the dictionary
asUINT GetSize() const;
// Deletes the key
void Delete(const std::string &key);
// Deletes all keys
void DeleteAll();
};

# Public script interface

      class dictionary
      {
        dictionary &opAssign(const dictionary &in other);

        void set(const string &in key, ? &in value);
        bool get(const string &in key, ? &out value) const;

        void set(const string &in key, int64 &in value);
        bool get(const string &in key, int64 &out value) const;

        void set(const string &in key, double &in value);
        bool get(const string &in key, double &out value) const;

        array<string> @getKeys() const;

        bool exists(const string &in key) const;
        void delete(const string &in key);
        void deleteAll();
        bool isEmpty() const;
        uint getSize() const;
      }

# Script example

      dictionary dict;
      obj object;
      obj @handle;

      dict.set("one", 1);
      dict.set("object", object);
      dict.set("handle", @handle);

      if( dict.exists("one") )
      {
        bool found = dict.get("handle", @handle);
        if( found )
        {
          dict.delete("object");
        }
      }

      dict.deleteAll();