io.h
00001 #ifndef IO_H 00002 #define IO_H 00003 00004 #include "doomed.h" 00005 #include <stdio.h> 00006 #include <string> 00007 #include <assert.h> 00008 00009 class Options; 00010 //==================================================== 00028 //==================================================== 00029 class IO 00030 { 00031 public: 00032 //==================================================== 00037 //==================================================== 00038 static IO& instance() 00039 { 00040 assert(msp_io && "Failed to call IO::build()"); 00041 return *msp_io; 00042 } 00043 00044 //==================================================== 00049 //==================================================== 00050 static void build() 00051 { 00052 if (msp_io != 0) 00053 return; 00054 msp_io = new IO(); 00055 ms_destroyer.setDoomed(msp_io); 00056 } 00057 00058 //==================================================== 00062 //==================================================== 00063 ~IO() {} 00064 00065 00066 //==================================================== 00078 //==================================================== 00079 void fopen(const char* outFn); 00080 00081 //==================================================== 00088 //==================================================== 00089 void fclose(); 00090 00091 //==================================================== 00099 //==================================================== 00100 void rename(); 00101 00102 //==================================================== 00112 //==================================================== 00113 void fputs(const char* s); 00114 00115 00116 private: 00117 //==================================================== 00121 //==================================================== 00122 IO(); 00123 00124 IO(const IO&); 00125 IO& operator=(const IO&); 00126 00127 private: 00128 //======================= 00129 // Attributes 00130 //======================= 00131 00132 //==================================================== 00144 //==================================================== 00145 FILE* mp_fpOut; 00146 00147 //==================================================== 00153 //==================================================== 00154 int m_flush; 00155 00156 //==================================================== 00162 //==================================================== 00163 int m_print; 00164 00165 //==================================================== 00169 //==================================================== 00170 std::string m_outFn; 00171 00172 //==================================================== 00176 //==================================================== 00177 std::string m_fn; 00178 00179 //==================================================== 00183 //==================================================== 00184 std::string m_fnBak; 00185 00186 00187 //==================================================== 00191 //==================================================== 00192 static IO* msp_io; 00193 00194 //==================================================== 00198 //==================================================== 00199 static SingletonDestroyer<IO> ms_destroyer; 00200 00201 }; 00202 00203 00204 00205 #endif //IO_H 00206 00207