#pragma once class ObjectModule { public: // オブジェクトモジュール名 std::string name; // 関連オブジェクトモジュールの名前リスト Jenga::Common::Strings relationalObjectModuleNames; // メタ情報 Meta meta; // グローバル領域のネイティブコード NativeCode globalNativeCode; // データテーブル DataTable dataTable; private: // ソースコード BasicSource source; // XMLシリアライズ用 private: virtual const char *RootTagName() const { return "objectModule"; } friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { trace_for_serialize( "serializing - objectModule" ); ar & BOOST_SERIALIZATION_NVP( name ); ar & BOOST_SERIALIZATION_NVP( relationalObjectModuleNames ); ar & BOOST_SERIALIZATION_NVP( meta ); ar & BOOST_SERIALIZATION_NVP( globalNativeCode ); ar & BOOST_SERIALIZATION_NVP( dataTable ); ar & BOOST_SERIALIZATION_NVP( source ); } public: ObjectModule() {} const std::string &GetName() const { return name; } void SetName( const std::string &name ) { this->name = name; } const BasicSource &GetSource() const { return source; } BasicSource &GetSource() { return source; } // 静的リンクを行う void StaticLink( ObjectModule &objectModule, bool isSll ); // 依存関係の解決を行う void Resolve( ResolveErrors &resolveErrors ); // 下記の関連になるようなテーブルを取得する // 要素 = 古いインデックス、値 = 新しいインデックス const std::vector GetRelationTable( const Jenga::Common::Strings &oldRelationalObjectModule ); bool Read( const std::string &filePath ); bool Write( const std::string &filePath ) const; bool ReadString( const std::string &str ); bool WriteString( std::string &str ) const; private: ObjectModule(ObjectModule const&); ObjectModule& operator =(ObjectModule const&); }; typedef std::vector ObjectModules;