JSBModule.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. //
  2. // Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
  3. // LICENSE: Atomic Game Engine Editor and Tools EULA
  4. // Please see LICENSE_ATOMIC_EDITOR_AND_TOOLS.md in repository root for
  5. // license information: https://github.com/AtomicGameEngine/AtomicGameEngine
  6. //
  7. #pragma once
  8. #include <Atomic/Core/Object.h>
  9. using namespace Atomic;
  10. namespace Atomic
  11. {
  12. class JSONFile;
  13. }
  14. namespace ToolCore
  15. {
  16. class JSBPackage;
  17. class JSBHeader;
  18. class JSBClass;
  19. class JSBEnum;
  20. class JSBPrimitiveType;
  21. class JSBModule : public Object
  22. {
  23. friend class JSModuleWriter;
  24. friend class CSModuleWriter;
  25. OBJECT(JSBModule)
  26. public:
  27. struct Constant
  28. {
  29. JSBPrimitiveType* type;
  30. String value;
  31. };
  32. JSBModule(Context* context, JSBPackage* package);
  33. virtual ~JSBModule();
  34. const String& GetName() { return name_; }
  35. JSBPackage* GetPackage() { return package_; }
  36. JSBClass* GetClass(const String& name);
  37. Vector<SharedPtr<JSBClass>> GetClasses();
  38. Vector<SharedPtr<JSBEnum>> GetEnums();
  39. HashMap<String, Constant>& GetConstants() { return constants_; }
  40. void RegisterClass(String name);
  41. JSBEnum* GetEnum(const String& name);
  42. void RegisterEnum(JSBEnum* jenum);
  43. bool ContainsConstant(const String& constantName);
  44. void RegisterConstant(const String& constantName, const String& value, unsigned type, bool isUnsigned = false);
  45. bool Requires(const String& requirement) { return requirements_.Contains(requirement); }
  46. bool Load(const String& jsonFilename);
  47. void PreprocessHeaders();
  48. void VisitHeaders();
  49. void PreprocessClasses();
  50. void ProcessClasses();
  51. void PostProcessClasses();
  52. void SetDotNetModule(bool value) { dotNetModule_ = value; }
  53. bool GetDotNetModule() { return dotNetModule_; }
  54. private:
  55. void ProcessOverloads();
  56. void ProcessExcludes();
  57. void ProcessTypeScriptDecl();
  58. void ProcessHaxeDecl();
  59. void ScanHeaders();
  60. String name_;
  61. SharedPtr<JSBPackage> package_;
  62. Vector<SharedPtr<JSBHeader>> headers_;
  63. Vector<String> includes_;
  64. Vector<String> sourceDirs_;
  65. Vector<String> classnames_;
  66. HashMap<String, String> classRenames_;
  67. // native name -> JSBClass
  68. HashMap<StringHash, SharedPtr<JSBClass> > classes_;
  69. HashMap<StringHash, SharedPtr<JSBEnum> > enums_;
  70. HashMap<String, Constant> constants_;
  71. Vector<String> requirements_;
  72. SharedPtr<JSONFile> moduleJSON_;
  73. bool dotNetModule_;
  74. };
  75. }