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();