// Copyright (c) 2008-2023 the Urho3D project // License: MIT #pragma once #include #include #include #include namespace ASBindingGenerator { class ASGeneratedFile_Base { protected: // Result file path std::string outputFilePath_; public: // Wrappers std::stringstream glue_; // Registration function body std::stringstream reg_; // Write result to file virtual void Save() {}; }; class ASGeneratedFile_WithRegistrationFunction : public ASGeneratedFile_Base { protected: // Registration function name std::string functionName_; public: ASGeneratedFile_WithRegistrationFunction(const std::string& outputFilePath, const std::string& functionName); }; class ASGeneratedFile_Members : public ASGeneratedFile_WithRegistrationFunction { public: using ASGeneratedFile_WithRegistrationFunction::ASGeneratedFile_WithRegistrationFunction; void Save() override; }; class ASGeneratedFile_Templates : public ASGeneratedFile_Base { public: ASGeneratedFile_Templates(const std::string& outputFilePath); // Write result to file void Save() override; }; struct ProcessedEnum { std::string name_; // Used for sorting std::string comment_; // Location std::vector glue_; // Can be empty std::string insideDefine_; // Can be empty std::vector registration_; // Or warning message // Used for sorting bool operator <(const ProcessedEnum& rhs) const; }; struct ProcessedGlobalFunction { std::string name_; // Used for sorting std::string comment_; // Location std::string glue_; // Can be empty std::string insideDefine_; // Can be empty std::string registration_; // Or warning message // Used for sorting bool operator <(const ProcessedGlobalFunction& rhs) const; }; struct ProcessedGlobalVariable { std::string name_; // Used for sorting std::string comment_; // Location std::string insideDefine_; // Can be empty std::string registration_; // Or warning message // Used for sorting bool operator <(const ProcessedGlobalVariable& rhs) const; }; struct Registration { std::string comment_; std::string glue_; std::vector registration_; }; struct SpecialMethodRegistration { std::string comment_; // C++ declaration / location for default constructor std::string glue_; std::string registration_; // Or warning message }; struct RegisterObjectMethodArgs { std::vector asDeclarations_; // String std::string funcPointer_; // asSFuncPtr std::string callConv_; // asDWORD }; struct MethodRegistration { std::string name_; // Used for sorting std::string cppDeclaration_; std::string glue_; RegisterObjectMethodArgs registration_; }; struct RegisterGlobalFunctionArgs { std::vector asDeclarations_; // String std::string funcPointer_; // asSFuncPtr std::string callConv_; // asDWORD }; struct StaticMethodRegistration { std::string name_; // Used for sorting std::string cppDeclaration_; std::string glue_; RegisterGlobalFunctionArgs registration_; }; struct RegisterObjectPropertyArgs { std::vector asDeclarations_; // String std::string byteOffset_; // int }; struct FieldRegistration { std::string name_; // Used for sorting std::string cppDeclaration_; RegisterObjectPropertyArgs registration_; }; struct RegisterGlobalPropertyArgs { std::vector asDeclarations_; // String std::string pointer_; // void* }; struct StaticFieldRegistration { std::string name_; // Used for sorting std::string cppDeclaration_; RegisterGlobalPropertyArgs registration_; }; /* struct RegisterObjectBehaviourArgs { std::string behaviour_; // asEBehaviours std::vector asDeclarations_; // String std::string funcPointer_; // asSFuncPtr std::string callConv_; // asDWORD }; struct BehaviorRegistration { std::string name_; // Used for sorting std::string cppDeclaration_; //std::string glue_; RegisterObjectBehaviourArgs registration_; }; */ struct MemberRegistrationError { std::string name_; // Used for sorting std::string comment_; // C++ declaration / location std::string message_; // Used for sorting bool operator <(const MemberRegistrationError& rhs) const; }; struct ProcessedClass { std::string name_; std::string dirName_; std::string insideDefine_; // Can be empty std::string comment_; // Class location std::string objectTypeRegistration_; // engine->RegisterObjectType(...); or warning message int inherianceDeep_ = 0; // Used for sorting // Used for sorting bool operator <(const ProcessedClass& rhs) const; std::shared_ptr defaultConstructor_; std::vector nonDefaultConstructors_; std::shared_ptr destructor_; std::vector unregisteredSpecialMethods_; //std::vector methods_; //std::vector staticMethods_; //std::vector unregisteredStaticMethods_; //std::vector fields_; //std::vector unregisteredFields_; //std::vector wrappedFields_; //std::vector staticFields_; //std::vector unregisteredStaticFields_; std::vector additionalLines_; bool noBind_ = false; std::vector baseClassNames_; std::vector subclassRegistrations_; // Base class members that were hidden in this class (c++ declarations) /*std::vector hiddenMethods_; std::vector hiddenStaticMethods_; std::vector hiddenFields_; std::vector hiddenStaticFields_;*/ std::vector templateMethods_; std::vector unregisteredTemplateMethods_; std::vector personalMethods_; std::vector unregisteredPersonalMethods_; std::vector templateStaticMethods_; std::vector unregisteredTemplateStaticMethods_; std::vector personalStaticMethods_; std::vector unregisteredPersonalStaticMethods_; std::vector personalFields_; std::vector unregisteredPersonalFields_; std::vector templateFields_; std::vector unregisteredTemplateFields_; std::vector personalStaticFields_; std::vector unregisteredPersonalStaticFields_; std::vector templateStaticFields_; std::vector unregisteredTemplateStaticFields_; }; namespace Result { extern std::vector enums_; extern std::vector globalFunctions_; extern std::vector globalVariables_; extern std::vector classes_; // Add header to lists if not added yet void AddHeader(const std::string& headerFile); } } // namespace ASBindingGenerator