AbyssLib 1.301
あびす謹製ノベルゲームフレームワークライブラリ

AbyssLibSrc/AbyssLib/AbyssLib/IOStream.h

説明を見る。
00001 /*************************************************
00002 ファイル名:IOStream.h
00003 作成者  :あびす
00004 役割   :データ入出力
00005 *************************************************/
00010 #ifndef ABYSSLIB_IOSTREAM_H
00011 #define ABYSSLIB_IOSTREAM_H
00012 
00013 namespace nsAbyssLib{
00014 
00015 namespace nsTaskManager{
00016 //依存構造体(参照先:TaskManager.h)
00017 struct DrawTask;
00018 struct Sprite;
00019 struct Button;
00020 struct EffectParam;
00021 struct UpdateParam;
00022 }
00023 namespace nsTextManager{
00024 //依存構造体(参照先:TextManager.h)
00025 struct Record;
00026 }
00027 namespace nsCore{
00028 //依存クラス(参照先:AbyssLib.h)
00029 class INovelEngine;
00030 }
00031 
00032 namespace nsIOStream{
00033 
00034 //データ入出力クラス(インターフェース)
00045 class IIOStream{
00046 public:
00047     //仮想デストラクタ
00051     ~IIOStream(){}
00052 
00053     //オープン・クローズ・オープンを確認
00064     virtual bool Open(const char* FileName, const char* Mode) = 0;
00073     virtual bool Close() = 0;
00078     virtual bool IsOpened() = 0;
00079 
00080     //データ入出力
00081     virtual void SaveNum(int Data) = 0;
00082     virtual void SaveChar(const char* Data) = 0;
00083     virtual void SavePrimitive(const void* Data, unsigned int Size) = 0;
00084 
00085     virtual void LoadNum(int* Data) = 0;
00086     virtual void LoadChar(char* Data) = 0;
00087     virtual void LoadPrimitive(void* Data, unsigned int Size) = 0;
00088 
00089     virtual void SaveStringM(const mystr& Data) = 0;
00090     virtual void SaveStringVM(const vector_mystr& Data) = 0;
00091     virtual void SaveExpression(const Expression& Data) = 0;
00092     virtual void SaveTextTokenSection(const TextTokenSection& Data) = 0;
00093 
00094     virtual void LoadStringM(mystr* Data) = 0;
00095     virtual void LoadStringVM(vector_mystr* Data) = 0;
00096     virtual void LoadExpression(Expression* Data) = 0;
00097     virtual void LoadTextTokenSection(TextTokenSection* Data) = 0;
00098 
00099     virtual void SaveDrawTask(const DrawTask& Data) = 0;
00100     virtual void SaveSprite(const Sprite& Data) = 0;
00101     virtual void SaveButton(const Button& Data) = 0;
00102     virtual void SaveEffectParam(const EffectParam& Data) = 0;
00103     virtual void SaveUpdateParam(const UpdateParam& Data) = 0;
00104 
00105     virtual void LoadDrawTask(DrawTask* Data) = 0;
00106     virtual void LoadSprite(Sprite* Data) = 0;
00107     virtual void LoadButton(Button* Data) = 0;
00108     virtual void LoadEffectParam(EffectParam* Data) = 0;
00109     virtual void LoadUpdateParam(UpdateParam* Data) = 0;
00110 
00111     virtual void SaveRecord(const Record& Data) = 0;
00112 
00113     virtual void LoadRecord(Record* Data) = 0;
00114 };
00115 
00116 //データ入出力クラス
00125 class BaseIOStream : public IIOStream{
00126 public:
00130     BaseIOStream();                                         //デフォルトコンストラクタ
00134     ~BaseIOStream();                                        //デストラクタ
00135 
00136     //オープン・クローズ・オープンを確認
00137     bool Open(const char* FileName, const char* Mode);
00138     bool Close();
00139     bool IsOpened();
00140 
00141     //データ入出力
00142     void SaveNum(int Data);
00143     void SaveChar(const char* Data);
00144     void SavePrimitive(const void* Data, unsigned int Size);
00145 
00146     void LoadNum(int* Data);
00147     void LoadChar(char* Data);
00148     void LoadPrimitive(void* Data, unsigned int Size);
00149 
00150     void SaveStringM(const mystr& Data);
00151     void SaveStringVM(const vector_mystr& Data);
00152     void SaveExpression(const Expression& Data);
00153     void SaveTextTokenSection(const TextTokenSection& Data);
00154 
00155     void LoadStringM(mystr* Data);
00156     void LoadStringVM(vector_mystr* Data);
00157     void LoadExpression(Expression* Data);
00158     void LoadTextTokenSection(TextTokenSection* Data);
00159 
00160     void SaveDrawTask(const DrawTask& Data);
00161     void SaveSprite(const Sprite& Data);
00162     void SaveButton(const Button& Data);
00163     void SaveEffectParam(const EffectParam& Data);
00164     void SaveUpdateParam(const UpdateParam& Data);
00165 
00166     void LoadDrawTask(DrawTask* Data);
00167     void LoadSprite(Sprite* Data);
00168     void LoadButton(Button* Data);
00169     void LoadEffectParam(EffectParam* Data);
00170     void LoadUpdateParam(UpdateParam* Data);
00171 
00172     void SaveRecord(const Record& Data);
00173 
00174     void LoadRecord(Record* Data);
00175 private:
00176     FILE* stream;
00177     BaseIOStream(const BaseIOStream&);                      //コピーコンストラクタ(禁止)
00178     BaseIOStream& operator =(const BaseIOStream&);          //代入演算子(禁止)
00179 };
00180 
00181 //ヘルパー関数
00187 void SaveStringS(IIOStream* IOStream, const string& Data);
00193 void SaveMapList(IIOStream* IOStream, const map<string, int>& Data);
00199 template <typename T> void SaveTemplate(IIOStream* IOStream, const T& Data){
00200     if(IOStream->IsOpened()){
00201         IOStream->SavePrimitive(&Data, sizeof(T));
00202     }
00203     else{
00204         RuntimeError(NULL, "ファイルがオープンされていません!");
00205     }
00206 }
00207 
00213 void LoadStringS(IIOStream* IOStream, string* Data);
00219 void LoadMapList(IIOStream* IOStream, map<string, int>* Data);
00225 template <typename T> void LoadTemplate(IIOStream* IOStream, T* Data){
00226     if(IOStream->IsOpened()){
00227         IOStream->LoadPrimitive(Data, sizeof(T));
00228     }
00229     else{
00230         RuntimeError(NULL, "ファイルがオープンされていません!");
00231     }
00232 }
00233 
00240 bool FindScriptFile(IIOStream* IOStream, const string& FileName);
00248 bool LoadEIsFullScreen(IIOStream* IOStream, const string& FileName);
00249 
00250 }
00251 }
00252 
00253 #endif
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義