Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/WolfireGames/overgrowth.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Scripting/angelscript/add_on/scripthandle/scripthandle.h')
-rw-r--r--Source/Scripting/angelscript/add_on/scripthandle/scripthandle.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/Source/Scripting/angelscript/add_on/scripthandle/scripthandle.h b/Source/Scripting/angelscript/add_on/scripthandle/scripthandle.h
new file mode 100644
index 00000000..f98217c4
--- /dev/null
+++ b/Source/Scripting/angelscript/add_on/scripthandle/scripthandle.h
@@ -0,0 +1,65 @@
+#ifndef SCRIPTHANDLE_H
+#define SCRIPTHANDLE_H
+
+#ifndef ANGELSCRIPT_H
+// Avoid having to inform include path if header is already include before
+#include <angelscript.h>
+#endif
+
+
+BEGIN_AS_NAMESPACE
+
+class CScriptHandle
+{
+public:
+ // Constructors
+ CScriptHandle();
+ CScriptHandle(const CScriptHandle &other);
+ CScriptHandle(void *ref, asITypeInfo *type);
+ ~CScriptHandle();
+
+ // Copy the stored value from another any object
+ CScriptHandle &operator=(const CScriptHandle &other);
+
+ // Set the reference
+ void Set(void *ref, asITypeInfo *type);
+
+ // Compare equalness
+ bool operator==(const CScriptHandle &o) const;
+ bool operator!=(const CScriptHandle &o) const;
+ bool Equals(void *ref, int typeId) const;
+
+ // Dynamic cast to desired handle type
+ void Cast(void **outRef, int typeId);
+
+ // Returns the type of the reference held
+ asITypeInfo *GetType() const;
+ int GetTypeId() const;
+
+ // Get the reference
+ void *GetRef();
+
+protected:
+ // These functions need to have access to protected
+ // members in order to call them from the script engine
+ friend void Construct(CScriptHandle *self, void *ref, int typeId);
+ friend void RegisterScriptHandle_Native(asIScriptEngine *engine);
+ friend void CScriptHandle_AssignVar_Generic(asIScriptGeneric *gen);
+
+ void ReleaseHandle();
+ void AddRefHandle();
+
+ // These shouldn't be called directly by the
+ // application as they requires an active context
+ CScriptHandle(void *ref, int typeId);
+ CScriptHandle &Assign(void *ref, int typeId);
+
+ void *m_ref;
+ asITypeInfo *m_type;
+};
+
+void RegisterScriptHandle(asIScriptEngine *engine);
+
+END_AS_NAMESPACE
+
+#endif