#pragma once #include #include #include #include #include #include #include #include class MetaImpl : public Jenga::Common::BoostXmlSupport { // 名前空間 NamespaceScopesCollection namespaceScopesCollection; // 関数・メソッド UserProcs userProcs; // クラス Classes classesImpl; // グローバル変数 Variables globalVars; // グローバル定数 Consts globalConsts; // グローバル定数マクロ ConstMacros globalConstMacros; // blittable型 BlittableTypes blittableTypes; // TypeDef TypeDefCollection typeDefs; // 関数ポインタ ProcPointers procPointers; // XMLシリアライズ用 private: virtual const char *RootTagName() const { return "metaImpl"; } friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { trace_for_serialize( "serializing - MetaImpl" ); ar & BOOST_SERIALIZATION_NVP( namespaceScopesCollection ); ar & BOOST_SERIALIZATION_NVP( userProcs ); ar & BOOST_SERIALIZATION_NVP( classesImpl ); ar & BOOST_SERIALIZATION_NVP( globalVars ); ar & BOOST_SERIALIZATION_NVP( globalConsts ); ar & BOOST_SERIALIZATION_NVP( globalConstMacros ); ar & BOOST_SERIALIZATION_NVP( blittableTypes ); ar & BOOST_SERIALIZATION_NVP( typeDefs ); ar & BOOST_SERIALIZATION_NVP( procPointers ); } Classes *pNowClassesForDebugger; public: MetaImpl() : classesImpl() , pNowClassesForDebugger( &classesImpl ) { } const NamespaceScopesCollection &GetNamespaces() const { return namespaceScopesCollection; } NamespaceScopesCollection &GetNamespaces() { return namespaceScopesCollection; } const UserProcs &GetUserProcs() const { return userProcs; } UserProcs &GetUserProcs() { return userProcs; } Classes &GetClasses() { return *pNowClassesForDebugger; } void SetClasses( Classes *pClasses ) { this->pNowClassesForDebugger = pClasses; } const Variables &GetGlobalVars() const { return globalVars; } Variables &GetGlobalVars() { return globalVars; } const Consts &GetGlobalConsts() const { return globalConsts; } Consts &GetGlobalConsts() { return globalConsts; } const ConstMacros &GetGlobalConstMacros() const { return globalConstMacros; } ConstMacros &GetGlobalConstMacros() { return globalConstMacros; } BlittableTypes &GetBlittableTypes() { return blittableTypes; } TypeDefCollection &GetTypeDefs() { return typeDefs; } // 関数ポインタ ProcPointers &GetProcPointers() { return procPointers; } bool AutoWrite( const std::string &filePath ) { std::ofstream ofs( filePath.c_str() ); bool isSuccessful = false; try{ boost::archive::xml_oarchive oa(ofs); // ファイルから読込 oa << boost::serialization::make_nvp( RootTagName(), *this ); isSuccessful = true; } catch(...){ // 失敗 } // 入力を閉じる ofs.close(); return isSuccessful; } };