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