#ifndef CXXFOOZZ_SRC_ANALYZER_CPP_PROGRAM_CONTEXT_HPP_ #define CXXFOOZZ_SRC_ANALYZER_CPP_PROGRAM_CONTEXT_HPP_ #include "model.hpp" namespace cxxfoozz { class ProgramContext { public: ProgramContext( const clang::ASTContext &ast_context, const std::vector> &class_type_models, const std::vector> &executables, const std::vector> &creators, const std::vector> &enum_type_models, const std::shared_ptr &inheritance_model ); const clang::ASTContext &GetAstContext() const; const std::vector> &GetClassTypeModels() const; const std::vector> &GetExecutables() const; const std::vector> &GetCreators() const; const std::vector> &GetEnumTypeModels() const; const std::shared_ptr &GetInheritanceModel() const; static const std::shared_ptr &GetKGlobProgramCtx(); static void SetKGlobProgramCtx(const std::shared_ptr &k_glob_program_ctx); private: const clang::ASTContext &ast_context_; const std::vector> &class_type_models_; const std::vector> &executables_; const std::vector> &creators_; const std::vector> &enum_type_models_; const std::shared_ptr &inheritance_model_; static std::shared_ptr kGlobProgramCtx; }; } // namespace cxxfoozz #endif //CXXFOOZZ_SRC_ANALYZER_CPP_PROGRAM_CONTEXT_HPP_