ASUtils.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright (c) 2008-2023 the Urho3D project
  2. // License: MIT
  3. #pragma once
  4. #include "XmlAnalyzer.h"
  5. #include <map>
  6. #include <stdexcept>
  7. #include <string>
  8. namespace ASBindingGenerator
  9. {
  10. enum class TypeUsage
  11. {
  12. FunctionParameter = 0,
  13. FunctionReturn,
  14. StaticField,
  15. Field,
  16. };
  17. struct ConvertedVariable
  18. {
  19. std::string asDeclaration_;
  20. std::string cppDeclaration_;
  21. std::string glue_;
  22. bool NeedWrapper() const { return !glue_.empty(); }
  23. };
  24. std::string JoinASDeclarations(const std::vector<ConvertedVariable>& vars);
  25. enum class VariableUsage
  26. {
  27. FunctionParameter = 0,
  28. FunctionReturn,
  29. StaticField,
  30. Field,
  31. PostfixIncDecParameter
  32. };
  33. ConvertedVariable CppVariableToAS(const TypeAnalyzer& type, VariableUsage usage, const std::string& name = "", const std::string& defaultValue = "");
  34. std::string CppTypeToAS(const TypeAnalyzer& type, TypeUsage typeUsage);
  35. std::shared_ptr<EnumAnalyzer> FindEnum(const std::string& name);
  36. std::string CppPrimitiveTypeToAS(const std::string& cppType);
  37. std::string CppValueToAS(const std::string& cppValue);
  38. class Exception : public std::runtime_error
  39. {
  40. using runtime_error::runtime_error;
  41. };
  42. bool IsKnownCppType(const std::string& name);
  43. // A union within a class may not have a type name. For such types, Doxygen generates identifiers like @123.
  44. // These identifiers can change and produce redundant changes in commits.
  45. std::string HideUnnamedType(const std::string& name);
  46. std::shared_ptr<ClassAnalyzer> FindClassByName(const std::string& name);
  47. std::shared_ptr<ClassAnalyzer> FindClassByID(const std::string& name);
  48. std::string GenerateWrapperName(const GlobalFunctionAnalyzer& functionAnalyzer);
  49. std::string GenerateWrapperName(const ClassStaticFunctionAnalyzer& functionAnalyzer);
  50. std::string GenerateWrapperName(const MethodAnalyzer& methodAnalyzer, bool templateVersion = false);
  51. std::string GenerateWrapper(const GlobalFunctionAnalyzer& functionAnalyzer, const std::vector<ConvertedVariable>& convertedParams, const ConvertedVariable& convertedReturn);
  52. std::string GenerateWrapper(const ClassStaticFunctionAnalyzer& functionAnalyzer, bool templateVersion, const std::vector<ConvertedVariable>& convertedParams, const ConvertedVariable& convertedReturn);
  53. std::string GenerateWrapper(const MethodAnalyzer& methodAnalyzer, bool templateVersion, const std::vector<ConvertedVariable>& convertedParams, const ConvertedVariable& convertedReturn);
  54. std::string GenerateConstructorWrapper(const MethodAnalyzer& methodAnalyzer, const std::vector<ConvertedVariable>& convertedParams);
  55. std::string GenerateFactoryWrapper(const MethodAnalyzer& methodAnalyzer, const std::vector<ConvertedVariable>& convertedParams);
  56. std::string Generate_asFUNCTIONPR(const GlobalFunctionAnalyzer& functionAnalyzer);
  57. std::string Generate_asFUNCTIONPR(const ClassStaticFunctionAnalyzer& functionAnalyzer, bool templateVersion);
  58. std::string Generate_asMETHODPR(const MethodAnalyzer& methodAnalyzer, bool templateVersion);
  59. }