00001 #ifndef SCT_FILE_OSTREAMFILE_H
00002 #define SCT_FILE_OSTREAMFILE_H
00003
00004 #include "../OStream.h"
00005 #include <fstream>
00006 #include <string>
00007 #include <cstring>
00008
00009 using std::fstream;
00010 using std::string;
00011 using std::strcpy;
00012
00013 namespace Sct {
00014 namespace File {
00015
00016 class OStreamFile : public virtual OStream {
00017 public:
00018 OStreamFile(const string& fileName) : file(fileName.c_str()) {
00019 if (!file.is_open()) {
00020 throw FileError("Couldn't open file", fileName);
00021 }
00022 }
00023
00024 virtual ~OStreamFile() {
00025 if (file.is_open()) {
00026 file.close();
00027 }
00028 }
00029
00030 virtual OStream & operator<<(bool val) {
00031 file << val << " ";
00032 return *this;
00033 }
00034
00035 virtual OStream & operator<<(char val) {
00036 file << (int)val << " ";
00037 return *this;
00038 }
00039
00040 virtual OStream & operator<<(unsigned char val) {
00041 file << (unsigned int)val << " ";
00042
00043 return *this;
00044 }
00045
00046 virtual OStream & operator<<(short val) {
00047 file << val << " ";
00048 return *this;
00049 }
00050
00051 virtual OStream & operator<<(unsigned short val){
00052 file << val << " ";
00053 return *this;
00054 }
00055
00056 virtual OStream & operator<<(int val) {
00057 file << val << " ";
00058 return *this;
00059 }
00060
00061 virtual OStream & operator<<(unsigned int val) {
00062 file << val << " ";
00063 return *this;
00064 }
00065
00066 virtual OStream & operator<<(long val) {
00067 file << val << " ";
00068 return *this;
00069 }
00070
00071 virtual OStream & operator<<(unsigned long val) {
00072 file << val << " ";
00073 return *this;
00074 }
00075
00076 virtual OStream & operator<<(double val) {
00077 file << val << " ";
00078 return *this;
00079 }
00080
00081 virtual OStream & operator<<(float val) {
00082 file << val << " ";
00083 return *this;
00084 }
00085
00086 virtual OStream & operator<<(const std::string & val) {
00087 file << val << " ";
00088 return *this;
00089 }
00090
00091
00092
00093
00094 virtual OStream & operator<<(const char * str) {
00095 file << str << " ";
00096 return *this;
00097 }
00098
00099 virtual OStream & operator<<(const unsigned char * str) {
00100 file << str << " ";
00101 return *this;
00102 }
00103
00104 virtual OStream & put(const bool* p, size_t size) {
00105 file << size << " ";
00106 for (unsigned int i=0; i<size; ++i) {
00107 file << p[i] << " ";
00108 }
00109 return *this;
00110 }
00111
00112 virtual OStream & put(const char* p, size_t size) {
00113 file << size << " ";
00114 for (unsigned int i=0; i<size; ++i) {
00115 file << (int)p[i] << " ";
00116 }
00117 return *this;
00118 }
00119
00120 virtual OStream & put(const unsigned char* p, size_t size) {
00121 file << size << " ";
00122 for (unsigned int i=0; i<size; ++i) {
00123 file << (int)p[i] << " ";
00124 }
00125 return *this;
00126 }
00127
00128 virtual OStream & put(const short* p, size_t size) {
00129 file << size << " ";
00130 for (unsigned int i=0; i<size; ++i) {
00131 file << p[i] << " ";
00132 }
00133 return *this;
00134 }
00135
00136 virtual OStream & put(const unsigned short* p, size_t size) {
00137 file << size << " ";
00138 for (unsigned int i=0; i<size; ++i) {
00139 file << p[i] << " ";
00140 }
00141 return *this;
00142 }
00143
00144 virtual OStream & put(const int* p, size_t size) {
00145 file << size << " ";
00146 for (unsigned int i=0; i<size; ++i) {
00147 file << p[i] << " ";
00148 }
00149 return *this;
00150 }
00151
00152 virtual OStream & put(const unsigned int* p, size_t size) {
00153 file << size << " ";
00154 for (unsigned int i=0; i<size; ++i) {
00155 file << p[i] << " ";
00156 }
00157 return *this;
00158 }
00159
00160 virtual OStream & put(const long* p, size_t size) {
00161 file << size << " ";
00162 for (unsigned int i=0; i<size; ++i) {
00163 file << p[i] << " ";
00164 }
00165 return *this;
00166 }
00167
00168 virtual OStream & put(const unsigned long* p, size_t size) {
00169 file << size << " ";
00170 for (unsigned int i=0; i<size; ++i) {
00171 file << p[i] << " ";
00172 }
00173 return *this;
00174 }
00175
00176 virtual OStream & put(const float* p, size_t size) {
00177 file << size << " ";
00178 for (unsigned int i=0; i<size; ++i) {
00179 file << p[i] << " ";
00180 }
00181 return *this;
00182 }
00183
00184 virtual OStream & put(const double* p, size_t size) {
00185 file << size << " ";
00186 for (unsigned int i=0; i<size; ++i) {
00187 file << p[i] << " ";
00188 }
00189 return *this;
00190 }
00191
00192 virtual OStream & put(const std::string* p, size_t size) {
00193 file << size << " ";
00194 for (unsigned int i=0; i<size; ++i) {
00195 file << p[i] << " ";
00196 }
00197 return *this;
00198 }
00199
00200
00201
00202
00203 private:
00204 ofstream file;
00205 };
00206 }
00207 }
00208 #endif //SCT_FILE_OSTREAMFILE_H