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
typedef std::string dictKey;
class CScriptDictionary
{
public:
void AddRef() const;
void Release() const;
CScriptDictionary &operator=(const CScriptDictionary &other);
void Set(const dictKey &key, void *value, int typeId);
void Set(
const dictKey &key,
asINT64 &value);
void Set(const dictKey &key, double &value);
bool Get(const dictKey &key, void *value, int typeId) const;
bool Get(
const dictKey &key,
asINT64 &value)
const;
bool Get(const dictKey &key, double &value) const;
CScriptDictValue *operator[](const dictKey &key);
const CScriptDictValue *operator[](const dictKey &key) const;
int GetTypeId(const dictKey &key) const;
bool Exists(const dictKey &key) const;
bool IsEmpty() const;
bool Delete(const dictKey &key);
void DeleteAll();
CScriptArray *GetKeys() const;
class CIterator
{
public:
void operator++();
void operator++(int);
bool operator==(const CIterator &other) const;
bool operator!=(const CIterator &other) const;
const dictKey &GetKey() const;
int GetTypeId() const;
bool GetValue(
asINT64 &value)
const;
bool GetValue(double &value) const;
bool GetValue(void *value, int typeId) const;
const void * GetAddressOfValue() const;
};
CIterator begin() const;
CIterator end() const;
CIterator find(const dictKey &key) const;
};
Public script interface
- See also
- Dictionaries in the script language
Example usage from C++
Here's a skeleton for iterating over the entries in the dictionary. For brevity the code doesn't show how to interpret the values, for more information on that see asETypeIdFlags and asIScriptEngine::GetTypeInfoById.
void iterateDictionary(CScriptDictionary *dict)
{
for (auto it : *dict)
{
std::string keyName = it.GetKey();
cout << "\"" << keyName << "\"" << " = ";
int typeId = it.GetTypeId();
const void *addressOfValue = it.GetAddressOfValue();
...
}
}