You.i Engine
YiDTBindingImplementation.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_DT_BINDING_IMPLEMENTATION_H_
3 #define _YI_DT_BINDING_IMPLEMENTATION_H_
5 #include "utility/YiRtti.h"
6 
7 #include <duktape.h>
8 
10 
26 {
27 public:
32  {
33  ConstructorData(duk_c_function callback, duk_int_t nArgs) : callback(callback), nArgs(nArgs) {};
34 
35  duk_c_function callback;
36  duk_int_t nArgs;
37  };
38 
42  struct PropertyData
43  {
44  PropertyData(const char *name, duk_uint_t uFlags, bool bIsFloat, duk_c_function getterCallback, duk_int_t nGetterArgs,
45  duk_c_function setterCallback, duk_int_t nSetterArgs, duk_int_t nValue, duk_double_t fValue)
46  : name(name), uFlags(uFlags), bIsFloat(bIsFloat), getterCallback(getterCallback), nGetterArgs(nGetterArgs)
47  , setterCallback(setterCallback), nSetterArgs(nSetterArgs), nValue(nValue), fValue(fValue) {};
48 
49  const char *name;
50  duk_uint_t uFlags;
51  bool bIsFloat;
52  duk_c_function getterCallback;
53  duk_int_t nGetterArgs;
54  duk_c_function setterCallback;
55  duk_int_t nSetterArgs;
56  duk_int_t nValue;
57  duk_double_t fValue;
58  };
59 
63  struct SignalData
64  {
65  SignalData(const char *signalName, duk_c_function connectCallback, duk_c_function disconnectCallback, duk_c_function disconnectAllCallback)
66  : signalName(signalName), connectCallback(connectCallback), disconnectCallback(disconnectCallback), disconnectAllCallback(disconnectAllCallback) {};
67 
68  const char *signalName;
69  duk_c_function connectCallback;
70  duk_c_function disconnectCallback;
71  duk_c_function disconnectAllCallback;
72  };
73 
75  CYIDTBindingImplementation(const std::vector<SignalData> &signalData);
77 
78  // CYIBindingImplementation Virtuals
79  virtual void CreateNewScriptObject(CYIBindingContext *pBindingContext, CYIScriptableObject *pScriptableObject, void *pScriptObjectPointer) override;
80  virtual void CreateNewScriptObject(CYIBindingContext *pBindingContext, std::shared_ptr<CYIScriptableObject> pScriptableObject, void *pScriptObjectPointer) override;
81  virtual void SetIsRooted(bool bIsRooted) override final;
82 
89  void InitConstructor(CYIScriptableObject *pScriptableObject);
90 
94  void PushOnStack();
95 
100  static duk_ret_t JSDestructor(duk_context *pDKContext);
101 
106  static duk_ret_t JSShallowConstructor(duk_context *pDKContext);
107 
111  static CYIDTBindingImplementation *GetInstanceFromStack(duk_context *pDKContext, duk_idx_t nIndex);
112 
113 protected:
118  static void CreateTemplateOnStack(duk_context *pDKContext, CYIString templateNamespace, CYIString templateName,
119  CYIString parentNameSpace, CYIString parentName, const ConstructorData &constructorData,
120  const duk_function_list_entry *pMethodList, const duk_function_list_entry *pStaticMethodList,
121  const std::vector<PropertyData> &propertyData, const std::vector<PropertyData> &staticPropertyData);
122 
123  const std::vector<SignalData> &m_signalData;
124 
125 private:
126  void CreateNewScriptObjectPriv(CYIBindingContext *pBindingContext, CYIScriptableObject *pScriptableObject, void *pScriptObjectPointer);
127 
129 
130 };
131 
136 #endif
duk_c_function connectCallback
Definition: YiDTBindingImplementation.h:69
Definition: YiDTBindingImplementation.h:63
duk_double_t fValue
Definition: YiDTBindingImplementation.h:57
Definition: YiDTBindingImplementation.h:31
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:35
static duk_ret_t JSShallowConstructor(duk_context *pDKContext)
static duk_ret_t JSDestructor(duk_context *pDKContext)
ConstructorData(duk_c_function callback, duk_int_t nArgs)
Definition: YiDTBindingImplementation.h:33
bool bIsFloat
Definition: YiDTBindingImplementation.h:51
virtual ~CYIDTBindingImplementation()
#define YI_TYPE_BASES(...)
Definition: YiRtti.h:350
PropertyData(const char *name, duk_uint_t uFlags, bool bIsFloat, duk_c_function getterCallback, duk_int_t nGetterArgs, duk_c_function setterCallback, duk_int_t nSetterArgs, duk_int_t nValue, duk_double_t fValue)
Definition: YiDTBindingImplementation.h:44
The base class for an object accessible from script source code.
Definition: YiScriptableObject.h:28
This is the base class for binding implementations between C++ and Javascript using the Duktape bindi...
Definition: YiDTBindingImplementation.h:25
duk_int_t nArgs
Definition: YiDTBindingImplementation.h:36
A binding context implementation for the Duktape Javascript binding engine.
Definition: YiDTBindingContext.h:32
duk_int_t nValue
Definition: YiDTBindingImplementation.h:56
duk_c_function disconnectAllCallback
Definition: YiDTBindingImplementation.h:71
duk_c_function setterCallback
Definition: YiDTBindingImplementation.h:54
The base class where binding occurs between C++ and another language.
Definition: YiBindingImplementation.h:27
const char * signalName
Definition: YiDTBindingImplementation.h:66
duk_c_function callback
Definition: YiDTBindingImplementation.h:33
The entry point for executing script source code in You.i Engine.
Definition: YiBindingContext.h:29
SignalData(const char *signalName, duk_c_function connectCallback, duk_c_function disconnectCallback, duk_c_function disconnectAllCallback)
Definition: YiDTBindingImplementation.h:65
duk_c_function getterCallback
Definition: YiDTBindingImplementation.h:52
duk_c_function disconnectCallback
Definition: YiDTBindingImplementation.h:70
const char * name
Definition: YiDTBindingImplementation.h:47
duk_uint_t uFlags
Definition: YiDTBindingImplementation.h:50
static void CreateTemplateOnStack(duk_context *pDKContext, CYIString templateNamespace, CYIString templateName, CYIString parentNameSpace, CYIString parentName, const ConstructorData &constructorData, const duk_function_list_entry *pMethodList, const duk_function_list_entry *pStaticMethodList, const std::vector< PropertyData > &propertyData, const std::vector< PropertyData > &staticPropertyData)
duk_int_t nSetterArgs
Definition: YiDTBindingImplementation.h:55
duk_int_t nGetterArgs
Definition: YiDTBindingImplementation.h:53
const std::vector< SignalData > & m_signalData
Definition: YiDTBindingImplementation.h:123
static CYIDTBindingImplementation * GetInstanceFromStack(duk_context *pDKContext, duk_idx_t nIndex)
void InitConstructor(CYIScriptableObject *pScriptableObject)
Definition: YiDTBindingImplementation.h:42
This file contains the classes and macros used to implement RTTI in You.i Engine. ...
virtual void CreateNewScriptObject(CYIBindingContext *pBindingContext, CYIScriptableObject *pScriptableObject, void *pScriptObjectPointer) override
virtual void SetIsRooted(bool bIsRooted) overridefinal