Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F627300
scriptdictionary.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Authored By
Unknown
Size
4 KB
Referenced Files
None
Subscribers
None
scriptdictionary.h
View Options
#ifndef SCRIPTDICTIONARY_H
#define SCRIPTDICTIONARY_H
// The dictionary class relies on the script string object, thus the script
// string type must be registered with the engine before registering the
// dictionary type
#ifndef ANGELSCRIPT_H
// Avoid having to inform include path if header is already include before
#include
<angelscript.h>
#endif
#include
"../source/as_atomic.h"
#include
<string>
#ifdef _MSC_VER
// Turn off annoying warnings about truncated symbol names
#pragma warning (disable:4786)
#endif
#if __cplusplus >= 201103
#include
<unordered_map>
#else
#include
<map>
#endif
// Sometimes it may be desired to use the same method names as used by C++ STL.
// This may for example reduce time when converting code from script to C++ or
// back.
//
// 0 = off
// 1 = on
#ifndef AS_USE_STLNAMES
#define AS_USE_STLNAMES 0
#endif
BEGIN_AS_NAMESPACE
class
CScriptArray
;
class
CScriptDictionary
{
protected
:
// The structure for holding the values
struct
valueStruct
{
union
{
asINT64
valueInt
;
double
valueFlt
;
void
*
valueObj
;
};
int
typeId
;
};
// The type of the internal map
#if __cplusplus >= 201103
typedef
std
::
unordered_map
<
std
::
string
,
valueStruct
>
mapType
;
#else
typedef
std
::
map
<
std
::
string
,
valueStruct
>
mapType
;
#endif
public
:
// Memory management
CScriptDictionary
(
asIScriptEngine
*
engine
);
void
AddRef
()
const
;
void
Release
()
const
;
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
;
// Returns true if the key is set
bool
Exists
(
const
std
::
string
&
key
)
const
;
bool
IsEmpty
()
const
;
asUINT
GetSize
()
const
;
// Deletes the key
void
Delete
(
const
std
::
string
&
key
);
// Deletes all keys
void
DeleteAll
();
// Deletes all keys that have null reference values
void
DeleteNulls
();
// Get an array of all keys
CScriptArray
*
GetKeys
()
const
;
// Garbage collections behaviours
int
GetRefCount
();
void
SetGCFlag
();
bool
GetGCFlag
();
void
EnumReferences
(
asIScriptEngine
*
engine
);
void
ReleaseAllReferences
(
asIScriptEngine
*
engine
);
// An iterator type to wrap for script iteration
struct
Iterator
{
public
:
// Returns the key of the current element or
// an error string if the iterator is at the end
const
std
::
string
&
GetKey
();
// Get the value of the current element
// Returns true if the value is of the correct type and
// the iterator is not at the end
bool
Iterate
(
void
*
value
,
int
typeId
);
bool
Iterate
(
std
::
string
*
key
,
void
*
value
,
int
typeId
);
// Returns whether the iterator is not at
// the end yet
bool
IsValid
();
// Copy the iterator
Iterator
&
operator
=
(
const
Iterator
&
other
);
Iterator
();
Iterator
(
const
CScriptDictionary
*
container
);
~
Iterator
();
friend
CScriptDictionary
;
protected
:
bool
first
;
asUINT
modCount
;
const
CScriptDictionary
*
container
;
mapType
::
const_iterator
it
;
};
// Returns an iterator
Iterator
GetIterator
()
const
;
// Delete the current element of an iterator
void
Delete
(
Iterator
&
it
);
protected
:
// We don't want anyone to call the destructor directly, it should be called through the Release method
virtual
~
CScriptDictionary
();
// Helper methods
void
FreeValue
(
valueStruct
&
value
);
bool
Iterator_GetValue
(
mapType
::
const_iterator
&
it
,
void
*
value
,
int
typeId
)
const
;
// Our properties
asIScriptEngine
*
engine
;
mutable
asCAtomic
refCount
;
mutable
bool
gcFlag
;
// Whenever we erase or insert a new key, we increment the modification count.
// Iterators check whether the modification count has changed, and will fail
// when it has. This makes iterator-based iteration safe for scripts.
asUINT
modCount
;
mapType
dict
;
};
// This function will determine the configuration of the engine
// and use one of the two functions below to register the dictionary object
void
RegisterScriptDictionary
(
asIScriptEngine
*
engine
);
// Call this function to register the math functions
// using native calling conventions
void
RegisterScriptDictionary_Native
(
asIScriptEngine
*
engine
);
// Use this one instead if native calling conventions
// are not supported on the target platform
void
RegisterScriptDictionary_Generic
(
asIScriptEngine
*
engine
);
END_AS_NAMESPACE
#endif
File Metadata
Details
Attached
Mime Type
text/x-c++
Expires
Sun, Nov 15, 1:52 AM (1 d, 21 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
129969
Default Alt Text
scriptdictionary.h (4 KB)
Attached To
Mode
R80 StarRuler2-Source
Attached
Detach File
Event Timeline