AbyssLib 1.301
あびす謹製ノベルゲームフレームワークライブラリ
|
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