#pragma once #include "CodegenConfig.hpp" #include "CodegenDecl.hpp" #include "CodegenUtils.hpp" #include #include #include using namespace std::literals; class CodegenModel { private: class Private; Private* m; public: CodegenModel(); ~CodegenModel(); // Implementation detail helper, don't use outside Private& GetPimpl() const { return *m; } DeclEnum* AddEnum(std::string fullname, DeclEnum decl); DeclStruct* AddStruct(std::string fullname, DeclStruct decl); const DeclEnum* FindEnum(std::string_view name) const; const DeclStruct* FindStruct(std::string_view name) const; DeclNamespace* AddNamespace(DeclNamespace ns); const DeclNamespace* FindNamespace(std::string_view fullname) const; DeclNamespace* FindNamespace(std::string_view name); };