ASResult.h 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. // Copyright (c) 2008-2023 the Urho3D project
  2. // License: MIT
  3. #pragma once
  4. #include <memory>
  5. #include <sstream>
  6. #include <string>
  7. #include <vector>
  8. namespace ASBindingGenerator
  9. {
  10. class ASGeneratedFile_Base
  11. {
  12. protected:
  13. // Result file path
  14. std::string outputFilePath_;
  15. public:
  16. // Wrappers
  17. std::stringstream glue_;
  18. // Registration function body
  19. std::stringstream reg_;
  20. // Write result to file
  21. virtual void Save() {};
  22. };
  23. class ASGeneratedFile_WithRegistrationFunction : public ASGeneratedFile_Base
  24. {
  25. protected:
  26. // Registration function name
  27. std::string functionName_;
  28. public:
  29. ASGeneratedFile_WithRegistrationFunction(const std::string& outputFilePath, const std::string& functionName);
  30. };
  31. class ASGeneratedFile_Members : public ASGeneratedFile_WithRegistrationFunction
  32. {
  33. public:
  34. using ASGeneratedFile_WithRegistrationFunction::ASGeneratedFile_WithRegistrationFunction;
  35. void Save() override;
  36. };
  37. class ASGeneratedFile_Templates : public ASGeneratedFile_Base
  38. {
  39. public:
  40. ASGeneratedFile_Templates(const std::string& outputFilePath);
  41. // Write result to file
  42. void Save() override;
  43. };
  44. struct ProcessedEnum
  45. {
  46. std::string name_; // Used for sorting
  47. std::string comment_; // Location
  48. std::vector<std::string> glue_; // Can be empty
  49. std::string insideDefine_; // Can be empty
  50. std::vector<std::string> registration_; // Or warning message
  51. // Used for sorting
  52. bool operator <(const ProcessedEnum& rhs) const;
  53. };
  54. struct ProcessedGlobalFunction
  55. {
  56. std::string name_; // Used for sorting
  57. std::string comment_; // Location
  58. std::string glue_; // Can be empty
  59. std::string insideDefine_; // Can be empty
  60. std::string registration_; // Or warning message
  61. // Used for sorting
  62. bool operator <(const ProcessedGlobalFunction& rhs) const;
  63. };
  64. struct ProcessedGlobalVariable
  65. {
  66. std::string name_; // Used for sorting
  67. std::string comment_; // Location
  68. std::string insideDefine_; // Can be empty
  69. std::string registration_; // Or warning message
  70. // Used for sorting
  71. bool operator <(const ProcessedGlobalVariable& rhs) const;
  72. };
  73. struct Registration
  74. {
  75. std::string comment_;
  76. std::string glue_;
  77. std::vector<std::string> registration_;
  78. };
  79. struct SpecialMethodRegistration
  80. {
  81. std::string comment_; // C++ declaration / location for default constructor
  82. std::string glue_;
  83. std::string registration_; // Or warning message
  84. };
  85. struct RegisterObjectMethodArgs
  86. {
  87. std::vector<std::string> asDeclarations_; // String
  88. std::string funcPointer_; // asSFuncPtr
  89. std::string callConv_; // asDWORD
  90. };
  91. struct MethodRegistration
  92. {
  93. std::string name_; // Used for sorting
  94. std::string cppDeclaration_;
  95. std::string glue_;
  96. RegisterObjectMethodArgs registration_;
  97. };
  98. struct RegisterGlobalFunctionArgs
  99. {
  100. std::vector<std::string> asDeclarations_; // String
  101. std::string funcPointer_; // asSFuncPtr
  102. std::string callConv_; // asDWORD
  103. };
  104. struct StaticMethodRegistration
  105. {
  106. std::string name_; // Used for sorting
  107. std::string cppDeclaration_;
  108. std::string glue_;
  109. RegisterGlobalFunctionArgs registration_;
  110. };
  111. struct RegisterObjectPropertyArgs
  112. {
  113. std::vector<std::string> asDeclarations_; // String
  114. std::string byteOffset_; // int
  115. };
  116. struct FieldRegistration
  117. {
  118. std::string name_; // Used for sorting
  119. std::string cppDeclaration_;
  120. RegisterObjectPropertyArgs registration_;
  121. };
  122. struct RegisterGlobalPropertyArgs
  123. {
  124. std::vector<std::string> asDeclarations_; // String
  125. std::string pointer_; // void*
  126. };
  127. struct StaticFieldRegistration
  128. {
  129. std::string name_; // Used for sorting
  130. std::string cppDeclaration_;
  131. RegisterGlobalPropertyArgs registration_;
  132. };
  133. /*
  134. struct RegisterObjectBehaviourArgs
  135. {
  136. std::string behaviour_; // asEBehaviours
  137. std::vector<std::string> asDeclarations_; // String
  138. std::string funcPointer_; // asSFuncPtr
  139. std::string callConv_; // asDWORD
  140. };
  141. struct BehaviorRegistration
  142. {
  143. std::string name_; // Used for sorting
  144. std::string cppDeclaration_;
  145. //std::string glue_;
  146. RegisterObjectBehaviourArgs registration_;
  147. };
  148. */
  149. struct MemberRegistrationError
  150. {
  151. std::string name_; // Used for sorting
  152. std::string comment_; // C++ declaration / location
  153. std::string message_;
  154. // Used for sorting
  155. bool operator <(const MemberRegistrationError& rhs) const;
  156. };
  157. struct ProcessedClass
  158. {
  159. std::string name_;
  160. std::string dirName_;
  161. std::string insideDefine_; // Can be empty
  162. std::string comment_; // Class location
  163. std::string objectTypeRegistration_; // engine->RegisterObjectType(...); or warning message
  164. int inherianceDeep_ = 0; // Used for sorting
  165. // Used for sorting
  166. bool operator <(const ProcessedClass& rhs) const;
  167. std::shared_ptr<SpecialMethodRegistration> defaultConstructor_;
  168. std::vector<SpecialMethodRegistration> nonDefaultConstructors_;
  169. std::shared_ptr<SpecialMethodRegistration> destructor_;
  170. std::vector<MemberRegistrationError> unregisteredSpecialMethods_;
  171. //std::vector<MethodRegistration> methods_;
  172. //std::vector<StaticMethodRegistration> staticMethods_;
  173. //std::vector<MemberRegistrationError> unregisteredStaticMethods_;
  174. //std::vector<FieldRegistration> fields_;
  175. //std::vector<MemberRegistrationError> unregisteredFields_;
  176. //std::vector<MethodRegistration> wrappedFields_;
  177. //std::vector<StaticFieldRegistration> staticFields_;
  178. //std::vector<MemberRegistrationError> unregisteredStaticFields_;
  179. std::vector<std::string> additionalLines_;
  180. bool noBind_ = false;
  181. std::vector<std::string> baseClassNames_;
  182. std::vector<std::string> subclassRegistrations_;
  183. // Base class members that were hidden in this class (c++ declarations)
  184. /*std::vector<std::string> hiddenMethods_;
  185. std::vector<std::string> hiddenStaticMethods_;
  186. std::vector<std::string> hiddenFields_;
  187. std::vector<std::string> hiddenStaticFields_;*/
  188. std::vector<Registration> templateMethods_;
  189. std::vector<MemberRegistrationError> unregisteredTemplateMethods_;
  190. std::vector<Registration> personalMethods_;
  191. std::vector<MemberRegistrationError> unregisteredPersonalMethods_;
  192. std::vector<Registration> templateStaticMethods_;
  193. std::vector<MemberRegistrationError> unregisteredTemplateStaticMethods_;
  194. std::vector<Registration> personalStaticMethods_;
  195. std::vector<MemberRegistrationError> unregisteredPersonalStaticMethods_;
  196. std::vector<Registration> personalFields_;
  197. std::vector<MemberRegistrationError> unregisteredPersonalFields_;
  198. std::vector<Registration> templateFields_;
  199. std::vector<MemberRegistrationError> unregisteredTemplateFields_;
  200. std::vector<Registration> personalStaticFields_;
  201. std::vector<MemberRegistrationError> unregisteredPersonalStaticFields_;
  202. std::vector<Registration> templateStaticFields_;
  203. std::vector<MemberRegistrationError> unregisteredTemplateStaticFields_;
  204. };
  205. namespace Result
  206. {
  207. extern std::vector<ProcessedEnum> enums_;
  208. extern std::vector<ProcessedGlobalFunction> globalFunctions_;
  209. extern std::vector<ProcessedGlobalVariable> globalVariables_;
  210. extern std::vector<ProcessedClass> classes_;
  211. // Add header to lists if not added yet
  212. void AddHeader(const std::string& headerFile);
  213. }
  214. } // namespace ASBindingGenerator