JSBClass.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #pragma once
  2. #include <Atomic/Core/Object.h>
  3. #include "JSBHeader.h"
  4. #include "JSBModule.h"
  5. using namespace Atomic;
  6. namespace ToolCore
  7. {
  8. class JSBPackage;
  9. class JSBFunction;
  10. class JSBType;
  11. // chosen function overrides
  12. class JSBFunctionSignature
  13. {
  14. public:
  15. JSBFunctionSignature(const String& name, const Vector<String>& sig);
  16. String name_;
  17. Vector<String> sig_;
  18. Vector<JSBType*> types_;
  19. bool Match(JSBFunction* function);
  20. void Parse() ;
  21. bool parsed_;
  22. };
  23. class JSBProperty
  24. {
  25. public:
  26. String name_;
  27. JSBFunction* getter_;
  28. JSBFunction* setter_;
  29. JSBProperty() : getter_(0), setter_(0)
  30. {
  31. }
  32. };
  33. class JSBClass : public Object
  34. {
  35. friend class JSBClassWriter;
  36. OBJECT(JSBClass)
  37. public:
  38. JSBClass(Context* context, JSBModule* module, const String& name, const String& nativeName);
  39. virtual ~JSBClass();
  40. const String& GetName() { return name_; }
  41. const String& GetNativeName() { return nativeName_; }
  42. JSBClass* GetBaseClass();
  43. PODVector<JSBClass*>& GetBaseClasses() {return baseClasses_; }
  44. PODVector<JSBFunction*>& GetFunctions() { return functions_; }
  45. bool IsAbstract() { return isAbstract_; }
  46. /// Note that if we at some point want to generate bindings for JSBClass
  47. /// this override will need to be addressed, as we'll need to know that JSBClass is
  48. /// itself an object
  49. bool IsObject() { return isObject_; }
  50. bool HasProperties() { return hasProperties_; }
  51. void GetPropertyNames(Vector<String>& names) { names = properties_.Keys(); }
  52. JSBProperty* GetProperty(const String& name)
  53. {
  54. if (!properties_.Contains(name))
  55. return 0;
  56. return properties_[name];
  57. }
  58. JSBHeader* GetHeader() { return header_; }
  59. JSBModule* GetModule() { return module_; }
  60. JSBPackage* GetPackage() { return module_->GetPackage(); }
  61. bool IsNumberArray() { return numberArrayElements_ != 0; }
  62. int GetNumberArrayElements() { return numberArrayElements_;}
  63. const String& GetArrayElementType() const { return arrayElementType_; }
  64. JSBFunction* GetConstructor();
  65. void SetAbstract(bool value = true) { isAbstract_ = value; }
  66. void SetObject(bool value = true) { isObject_ = value; }
  67. void SetHeader(JSBHeader* header) { header_ = header; }
  68. void SetBaseClass(JSBClass* baseClass);
  69. void SetSkipFunction(const String& name, bool skip = true);
  70. void AddFunction(JSBFunction* function);
  71. void AddFunctionOverride(JSBFunctionSignature* override) { overrides_.Push(override); }
  72. void AddFunctionExclude(JSBFunctionSignature* exclude) { excludes_.Push(exclude); }
  73. void AddPropertyFunction(JSBFunction* function);
  74. void Preprocess();
  75. void Process();
  76. void PostProcess();
  77. void Dump();
  78. private:
  79. void RecursiveAddBaseClass(PODVector<JSBClass *> &baseClasses);
  80. String name_;
  81. String nativeName_;
  82. SharedPtr<JSBHeader> header_;
  83. SharedPtr<JSBModule> module_;
  84. PODVector<JSBFunction*> functions_;
  85. PODVector<JSBClass*> baseClasses_;
  86. PODVector<JSBFunctionSignature*> overrides_;
  87. PODVector<JSBFunctionSignature*> excludes_;
  88. bool isAbstract_;
  89. bool isObject_;
  90. // Vector3, Color, etc are marshalled via arrays
  91. int numberArrayElements_;
  92. String arrayElementType_;
  93. bool hasProperties_;
  94. HashMap<String, JSBProperty*> properties_;
  95. };
  96. }