archive.hpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 namespace Gecode {
00045 class Archive {
00046 private:
00048 int _size;
00050 int _n;
00052 unsigned int* _a;
00054 int _pos;
00056 GECODE_KERNEL_EXPORT void resize(int n);
00057 public:
00059 Archive(void);
00061 GECODE_KERNEL_EXPORT ~Archive(void);
00063 GECODE_KERNEL_EXPORT Archive(const Archive& e);
00065 GECODE_KERNEL_EXPORT Archive& operator =(const Archive& e);
00067 void put(unsigned int i);
00069 int size(void) const;
00071 unsigned int operator [](int i) const;
00073 unsigned int get(void);
00074 };
00075
00079 Archive&
00080 operator <<(Archive& e, unsigned int i);
00084 Archive&
00085 operator <<(Archive& e, int i);
00089 Archive&
00090 operator <<(Archive& e, unsigned short i);
00094 Archive&
00095 operator <<(Archive& e, short i);
00099 Archive&
00100 operator <<(Archive& e, unsigned char i);
00104 Archive&
00105 operator <<(Archive& e, char i);
00109 Archive&
00110 operator <<(Archive& e, bool i);
00114 Archive&
00115 operator <<(Archive& e, float d);
00119 Archive&
00120 operator <<(Archive& e, double d);
00121
00125 Archive&
00126 operator >>(Archive& e, unsigned int& i);
00130 Archive&
00131 operator >>(Archive& e, int& i);
00135 Archive&
00136 operator >>(Archive& e, unsigned short& i);
00140 Archive&
00141 operator >>(Archive& e, short& i);
00145 Archive&
00146 operator >>(Archive& e, unsigned char& i);
00150 Archive&
00151 operator >>(Archive& e, char& i);
00155 Archive&
00156 operator >>(Archive& e, bool& i);
00160 Archive&
00161 operator >>(Archive& e, float& d);
00165 Archive&
00166 operator >>(Archive& e, double& d);
00167
00168
00169
00170
00171
00172
00173 forceinline
00174 Archive::Archive(void) : _size(0), _n(0), _a(NULL), _pos(0) {}
00175
00176 forceinline void
00177 Archive::put(unsigned int i) {
00178 if (_n==_size)
00179 resize(_n+1);
00180 _a[_n++] = i;
00181 }
00182
00183 forceinline int
00184 Archive::size(void) const { return _n; }
00185
00186 forceinline unsigned int
00187 Archive::operator [](int i) const {
00188 assert(i < _n);
00189 return _a[i];
00190 }
00191
00192 forceinline unsigned int
00193 Archive::get(void) {
00194 assert(_pos < _n);
00195 return _a[_pos++];
00196 }
00197
00198 forceinline Archive&
00199 operator <<(Archive& e, unsigned int i) {
00200 e.put(i);
00201 return e;
00202 }
00203 forceinline Archive&
00204 operator <<(Archive& e, int i) {
00205 e.put(static_cast<unsigned int>(i));
00206 return e;
00207 }
00208 forceinline Archive&
00209 operator <<(Archive& e, unsigned short i) {
00210 e.put(i);
00211 return e;
00212 }
00213 forceinline Archive&
00214 operator <<(Archive& e, short i) {
00215 e.put(static_cast<unsigned int>(i));
00216 return e;
00217 }
00218 forceinline Archive&
00219 operator <<(Archive& e, unsigned char i) {
00220 e.put(i);
00221 return e;
00222 }
00223 forceinline Archive&
00224 operator <<(Archive& e, char i) {
00225 e.put(static_cast<unsigned int>(i));
00226 return e;
00227 }
00228 forceinline Archive&
00229 operator <<(Archive& e, bool i) {
00230 e.put(static_cast<unsigned int>(i));
00231 return e;
00232 }
00233 forceinline Archive&
00234 operator <<(Archive& e, float d) {
00235 for (size_t i=0; i<sizeof(float); i++)
00236 e.put(static_cast<unsigned int>(reinterpret_cast<char*>(&d)[i]));
00237 return e;
00238 }
00239 forceinline Archive&
00240 operator <<(Archive& e, double d) {
00241 for (size_t i=0; i<sizeof(double); i++)
00242 e.put(static_cast<unsigned int>(reinterpret_cast<char*>(&d)[i]));
00243 return e;
00244 }
00245
00246 forceinline Archive&
00247 operator >>(Archive& e, unsigned int& i) {
00248 i = e.get();
00249 return e;
00250 }
00251 forceinline Archive&
00252 operator >>(Archive& e, int& i) {
00253 i = static_cast<int>(e.get());
00254 return e;
00255 }
00256 forceinline Archive&
00257 operator >>(Archive& e, unsigned short& i) {
00258 i = static_cast<unsigned short>(e.get());
00259 return e;
00260 }
00261 forceinline Archive&
00262 operator >>(Archive& e, short& i) {
00263 i = static_cast<short>(e.get());
00264 return e;
00265 }
00266 forceinline Archive&
00267 operator >>(Archive& e, unsigned char& i) {
00268 i = static_cast<unsigned char>(e.get());
00269 return e;
00270 }
00271 forceinline Archive&
00272 operator >>(Archive& e, char& i) {
00273 i = static_cast<char>(e.get());
00274 return e;
00275 }
00276 forceinline Archive&
00277 operator >>(Archive& e, bool& i) {
00278 i = static_cast<bool>(e.get());
00279 return e;
00280 }
00281 forceinline Archive&
00282 operator >>(Archive& e, float& d) {
00283 char* cd = reinterpret_cast<char*>(&d);
00284 for (size_t i=0; i<sizeof(float); i++)
00285 cd[i] = static_cast<char>(e.get());
00286 return e;
00287 }
00288 forceinline Archive&
00289 operator >>(Archive& e, double& d) {
00290 char* cd = reinterpret_cast<char*>(&d);
00291 for (size_t i=0; i<sizeof(double); i++)
00292 cd[i] = static_cast<char>(e.get());
00293 return e;
00294 }
00295
00296 }
00297
00298