Main Page   Modules   Namespace List   Class Hierarchy   Data Structures   File List   Namespace Members   Data Fields   Globals   Related Pages  

OStreamFile2.h

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

Generated on Mon Dec 15 19:36:10 2003 for SCT DAQ/DCS Software by doxygen1.3-rc3