Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cJSXEngine.h
Go to the documentation of this file.
1 //
4 //
5 #ifndef _INC_cJSXEngine_H
6 #define _INC_cJSXEngine_H
7 #ifndef NO_PRAGMA_ONCE
8 #pragma once
9 #endif
10 
11 #include "cJSXObject.h"
12 #include "cJSXContext.h"
13 #include "cJSXClass.h"
16 
17 namespace GrayLib
18 {
19  class cXObjModule;
20  class cXObject;
21 };
22 namespace GrayJS
23 {
24  class cJSRuntime;
25  class cJSXClass;
26  typedef cJSXClass* cJSXClassPtr; // don't hold locks.
27  class cJSXContext;
28  typedef cRefPtr<cJSXContext> cJSXContextPtr;
29  class cJSXObject;
31 
33  : public cXObjPackFactory
34  , public cSingletonSmart<cJSXEngine>
35  {
44 
45  public:
48 
51 
54 
57 
59  mutable cThreadLockCount m_Lock; // lockable object.
60 
61  private:
62  cJSXObjectPtr m_pJSXObjGlobal;
63 
64  private:
65  cJSXClassPtr FindorCreateJSXClass(const cScriptableInterfaceDef* pClassDef);
66  cJSXClassPtr FindorCreateJSXClass(cXObject* pObj);
67  cJSXClassPtr FindorCreateJSXClass(const char* pszClassName);
68 
69  public:
70  virtual cXObjPackPtr CreateXObjFile(const FILECHAR_t* pszFilePath) override;
71 
72  public:
73  cJSXEngine();
74  virtual ~cJSXEngine();
75 
76  bool InitJSX();
77  void ExitJSX();
78  bool IsInitJSX() const noexcept
79  {
80  // Was Init called?
81  return m_pjsRuntime != nullptr ;
82  }
83 
84  static GRAY_JSBool _cdecl SetProperty(JSContext* pjsCx, JSObject* pjsObj, GRAY_jsval id, GRAY_jsval* vp);
85  static GRAY_JSBool _cdecl GetProperty(JSContext* pjsCx, JSObject* pjsObj, GRAY_jsval idPropRaw, GRAY_jsval* pvalRet);
86  static GRAY_JSBool _cdecl MethodInvoke(JSContext* pjsCx, JSObject* pjsObj, UINT argc, GRAY_jsval* pargv, GRAY_jsval* prval);
87  static void _cdecl Finalize(JSContext* pjsCx, JSObject* pjsObj); // JSFinalizeOp
88 #ifdef USE_JS_PROTO
89  static GRAY_JSBool _cdecl Resolve(JSContext* pjsCx, JSObject* pjsObj, GRAY_jsval id, GRAY_uintN flags, JSObject** ppjsObj);
90  static GRAY_JSBool _cdecl Construct(JSContext *pjsCx, JSObject *pjsObj, GRAY_uintN argc, GRAY_jsval *argv, GRAY_jsval *rval);
91 #endif
92 #ifdef USE_JS_TAGS
93  // allow adding of tags.
94  static GRAY_JSBool _cdecl AddProperty(JSContext* pjsCx, JSObject* pjsObj, GRAY_jsval idPropRaw, GRAY_jsval* vp);
95  static GRAY_JSBool _cdecl DelProperty(JSContext* pjsCx, JSObject* pjsObj, GRAY_jsval idPropRaw, GRAY_jsval* vp);
96 #endif
97 
98  static void _cdecl ErrorReporter(JSContext* pjsCx, const LOGCHAR_t* message, JSErrorReport* report);
99 
100  cJSXContextPtr CreateJSXContext();
101  cJSXContextPtr GetJSXContextCurrent(bool bCreate = true);
102  static cJSXContextPtr GRAYCALL GetJSXContext(cJSContext* pjsCx);
103 
104  int CvtVartoJSValArray(cNewPtr<GRAY_jsval>& rVals, cJSContext* pjsCx, const cVariant& vVal);
105  bool CvtVartoJSVal(cJSContext* pjsCx, GRAY_jsval* vp, const cVariant& vVal);
106  static int GRAYCALL CvtJSValArraytoVar(cVariant& vVal, cJSContext* pjsCx, const GRAY_jsval* argv, int argc);
107  static bool GRAYCALL CvtJSValtoVar(cJSContext* pjsCx, const GRAY_jsval* vp, cVariant& vVal);
108 
109  static cXObjectPtr GRAYCALL GetXObject(cJSContext* pjsCx, cJSObject* pjsObj);
110 
111  cJSXObjectPtr AssocJSXObject(cJSContext* pjsCx, cXObject* pObj, cJSObject* pjsObject);
112  cJSXObjectPtr NewJSXObject(cJSContext* pjsCx, cXObject* pObj, cJSObject* pjsObjProto, cJSObject* pjsObjParent);
113  cJSXObjectPtr FindJSXObject(cXObject* pObj) const;
114  cJSXObjectPtr GetJSXObject(cJSContext* pjsCx, cXObject* pObj);
115  cJSXObjectPtr FindJSXObject(cJSContext* pjsCx, cJSObject* pjsObject);
116  cJSObject* get_JSObjectGlobal() const;
117  cJSXObjectPtr CreateJSXObjectGlobal(cJSContext* pjsCx);
118  void CheckJSObjectsCache(cJSContext* pjsCx);
119  void FinalizeJSObject(cJSContext* pjsCx, cJSObject* pjsObject);
120 
121  static bool IsClassJSXProto(const cScriptableInterfaceDef* pClassDef);
122 
124  };
125 }
126 
127 #endif // _INC_cJSXEngine_H
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define GRAYJS_LINK
Definition: GrayJSX.h:27
Definition: cJSObject.h:56
Definition: cJSObject.h:47
Definition: cJSObject.h:117
Definition: cJSXClass.h:35
Definition: cJSXEngine.h:35
cArraySortHash< cJSXObject > m_aJSXObjects
cache of all cJSXObjectPtr = JSObject/cXObject created.
Definition: cJSXEngine.h:56
cJSXContextPtr m_pJSXContextDef
the default/global context. used to create m_pJSXObjGlobal
Definition: cJSXEngine.h:47
static GRAY_JSBool _cdecl Construct(JSContext *pjsCx, JSObject *pjsObj, GRAY_uintN argc, GRAY_jsval *argv, GRAY_jsval *rval)
bool IsInitJSX() const noexcept
Definition: cJSXEngine.h:78
static GRAY_JSBool _cdecl Resolve(JSContext *pjsCx, JSObject *pjsObj, GRAY_jsval id, GRAY_uintN flags, JSObject **ppjsObj)
UNITTEST_FRIEND(cJSXEngine)
cThreadLockCount m_Lock
Definition: cJSXEngine.h:59
static GRAY_JSBool _cdecl AddProperty(JSContext *pjsCx, JSObject *pjsObj, GRAY_jsval idPropRaw, GRAY_jsval *vp)
cJSXClassPtr m_pJSXClassBase
object to ref the common base class. XObject
Definition: cJSXEngine.h:58
cArrayRef< cJSXClass > m_aJSXClasses
cache of cJSXClass for each interface.
Definition: cJSXEngine.h:50
static GRAY_JSBool _cdecl DelProperty(JSContext *pjsCx, JSObject *pjsObj, GRAY_jsval idPropRaw, GRAY_jsval *vp)
cJSRuntime * m_pjsRuntime
library reference.
Definition: cJSXEngine.h:46
cThreadLocalTypeSmart< cJSXContext > m_aJSXContexts
cache of all cJSXContext being used and not used.
Definition: cJSXEngine.h:53
Definition: cScriptableInterface.h:300
Definition: cThreadLocal.h:196
Definition: cVariant.h:26
Definition: cXObjPack.h:110
Definition: cXObject.h:78
Definition: cArrayRef.h:21
Definition: cArraySortRef.h:60
Definition: cNewPtr.h:18
Definition: cSingletonPtr.h:20
Definition: cThreadLock.h:498
Definition: cJSObject.h:36
cJSXClass * cJSXClassPtr
Definition: cJSXClass.h:105
unsigned int GRAY_uintN
Definition: GrayJSX.h:55
int GRAY_JSBool
Definition: GrayJSX.h:53
cRefPtr< cJSXContext > cJSXContextPtr
Definition: cJSXContext.h:39
long GRAY_jsval
match this to 'jsval' so i don't have to use the "#include "jsapi.h""
Definition: GrayJSX.h:50
cRefPtr< cJSXObject > cJSXObjectPtr
Definition: cJSXEngine.h:29
Definition: cMesh.h:22
class __DECL_IMPORT cXObject
Definition: cXObject.h:33
char FILECHAR_t
a UTF8 char in a file name. like TCHAR
Definition: FileName.h:22
char LOGCHAR_t
always just use UTF8 for logs, don't bother with UNICODE.
Definition: cLogLevel.h:17
Definition: cJSObject.h:27
Definition: cJSObject.h:28