00001 #ifndef PDX_AUTO_SERIALIZER_HPP
00002 #define PDX_AUTO_SERIALIZER_HPP
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "gfcpp_globals.hpp"
00014 #include "PdxWriter.hpp"
00015 #include "PdxReader.hpp"
00016 #include "VectorT.hpp"
00017 #include "HashMapT.hpp"
00018 #include "HashSetT.hpp"
00019 #include "GemfireTypeIds.hpp"
00020 #include "TypeHelper.hpp"
00021
00022
00023 namespace gemfire
00024 {
00025 namespace PdxAutoSerializable
00026 {
00027
00028
00029
00030 #ifdef _SOLARIS
00031 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, int8_t value )
00032 {
00033 pw->writeByte( fieldName, value );
00034 }
00035 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, int8_t& value )
00036 {
00037 value = pr->readByte(fieldName);
00038 }
00039 #else
00040 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, char value )
00041 {
00042 pw->writeChar( fieldName, value );
00043 }
00044 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, char& value )
00045 {
00046 value = pr->readChar(fieldName) ;
00047 }
00048 #endif
00049
00050 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, wchar_t value )
00051 {
00052 pw->writeWideChar(fieldName, value );
00053 }
00054 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, wchar_t& value )
00055 {
00056 value = pr->readWideChar( fieldName );
00057 }
00058
00059 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, bool value )
00060 {
00061 pw->writeBoolean( fieldName, value );
00062 }
00063 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, bool& value )
00064 {
00065 value = pr->readBoolean( fieldName );
00066 }
00067
00068 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, signed char value )
00069 {
00070 pw->writeByte( fieldName, value );
00071 }
00072 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, signed char& value )
00073 {
00074 value = pr->readByte(fieldName);
00075 }
00076
00077 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, int16_t value )
00078 {
00079 pw->writeShort( fieldName, value );
00080 }
00081 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, int16_t& value )
00082 {
00083 value = pr->readShort( fieldName );
00084 }
00085
00086 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, int32_t value )
00087 {
00088 pw->writeInt( fieldName, value );
00089 }
00090 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, int32_t& value )
00091 {
00092 value = pr->readInt( fieldName );
00093 }
00094
00095 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, int64_t value )
00096 {
00097 pw->writeLong( fieldName, value );
00098 }
00099 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, int64_t& value )
00100 {
00101 value = pr->readLong( fieldName);
00102 }
00103
00104 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, float value )
00105 {
00106 pw->writeFloat( fieldName, value );
00107 }
00108 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, float& value )
00109 {
00110 value = pr->readFloat( fieldName );
00111 }
00112
00113 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, double value )
00114 {
00115 pw->writeDouble( fieldName, value );
00116 }
00117 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, double& value )
00118 {
00119 value = pr->readDouble( fieldName );
00120 }
00121
00122 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, CacheableDatePtr value )
00123 {
00124 pw->writeDate( fieldName, value );
00125 }
00126 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, CacheableDatePtr& value )
00127 {
00128 value = pr->readDate( fieldName );
00129 }
00130
00131 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, const char* value )
00132 {
00133 pw->writeString( fieldName, value );
00134 }
00135 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, char*& value )
00136 {
00137 value = pr->readString( fieldName );
00138 }
00139
00140 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName,
00141 const wchar_t* value )
00142 {
00143 pw->writeWideString( fieldName, value );
00144 }
00145 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, wchar_t*& value )
00146 {
00147 value = pr->readWideString( fieldName );
00148 }
00149
00150 #ifdef _SOLARIS
00151 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName,
00152 char** value, int32_t arraySize, int32_t* elemArraySize)
00153 {
00154
00155 pw->writeArrayOfByteArrays(fieldName, (char**)value, arraySize, elemArraySize);
00156 }
00157 inline void readPdxObject(gemfire::PdxReaderPtr& pr, const char* fieldName, char**&value,
00158 int32_t& len, int32_t*& Lengtharr)
00159 {
00160 GF_NEW( Lengtharr, int32_t[len]);
00161 value = (char**)pr->readArrayOfByteArrays(fieldName, len, &Lengtharr);
00162 }
00163 #else
00164 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName,
00165 int8_t** value, int32_t arraySize, int32_t* elemArraySize)
00166 {
00167 pw->writeArrayOfByteArrays(fieldName, value, arraySize, elemArraySize);
00168 }
00169 inline void readPdxObject(gemfire::PdxReaderPtr& pr, const char* fieldName, int8_t**&value,
00170 int32_t& len, int32_t*& Lengtharr)
00171 {
00172 GF_NEW( Lengtharr, int32_t[len]);
00173 value = (signed char**)pr->readArrayOfByteArrays(fieldName, len, &Lengtharr);
00174 }
00175 #endif
00176
00177
00178
00179 template <typename TObj>
00180 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName,
00181 const gemfire::SharedPtr< TObj >& value,
00182 gemfire::TypeHelper::yes_type isSerializable )
00183 {
00184 pw->writeObject( fieldName, value );
00185 }
00186
00187 template <typename TObj>
00188 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName,
00189 const gemfire::SharedPtr< TObj >& value )
00190 {
00191 writePdxObject( pw, fieldName, value, GF_TYPE_IS_SERIALIZABLE_TYPE( TObj ) );
00192 }
00193
00194 template <typename TObj>
00195 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName,
00196 gemfire::SharedPtr< TObj >& value,
00197 gemfire::TypeHelper::yes_type isSerializable )
00198 {
00199 value = dynCast<gemfire::SharedPtr< TObj > >(pr->readObject(fieldName));
00200 }
00201
00202 template <typename TObj>
00203 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName,
00204 gemfire::SharedPtr< TObj >& value )
00205 {
00206 readPdxObject( pr, fieldName, value, GF_TYPE_IS_SERIALIZABLE_TYPE( TObj ) );
00207 }
00208
00209 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, bool* value,
00210 int32_t len )
00211 {
00212 pw->writeBooleanArray( fieldName, value, len );
00213 }
00214
00215 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, bool*& value,
00216 int32_t& len )
00217 {
00218 value = pr->readBooleanArray( fieldName, len );
00219 }
00220
00221 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, wchar_t* value,
00222 int32_t len )
00223 {
00224 pw->writeWideCharArray( fieldName, value, len );
00225 }
00226
00227 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, wchar_t*& value,
00228 int32_t& len )
00229 {
00230 value = pr->readWideCharArray( fieldName, len );
00231 }
00232
00233 #ifdef _SOLARIS
00234 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, int8_t* value,
00235 int32_t len )
00236 {
00237 pw->writeByteArray( fieldName, value, len );
00238 }
00239
00240 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, int8_t*& value,
00241 int32_t& len )
00242 {
00243 value = (int8_t*)pr->readByteArray( fieldName, len );
00244 }
00245 #else
00246
00247 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, char* value,
00248 int32_t len )
00249 {
00250 pw->writeCharArray( fieldName, value, len );
00251 }
00252
00253 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, char*& value,
00254 int32_t& len )
00255 {
00256 value = pr->readCharArray( fieldName, len );
00257 }
00258
00259 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, signed char* value,
00260 int32_t len )
00261 {
00262 pw->writeByteArray( fieldName, value, len );
00263 }
00264
00265 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, signed char*& value,
00266 int32_t& len )
00267 {
00268 value = (signed char*)pr->readByteArray( fieldName, len );
00269 }
00270 #endif
00271
00272 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, int16_t* value,
00273 int32_t len )
00274 {
00275 pw->writeShortArray( fieldName, value, len );
00276 }
00277
00278 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, int16_t*& value,
00279 int32_t& len )
00280 {
00281 value = pr->readShortArray( fieldName, len );
00282 }
00283
00284 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, int32_t* value,
00285 int32_t len )
00286 {
00287 pw->writeIntArray( fieldName, value, len );
00288 }
00289
00290 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, int32_t*& value,
00291 int32_t& len )
00292 {
00293 value = pr->readIntArray( fieldName, len );
00294 }
00295
00296 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, int64_t* value,
00297 int32_t len )
00298 {
00299 pw->writeLongArray( fieldName, value, len );
00300 }
00301
00302 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, int64_t*& value,
00303 int32_t& len )
00304 {
00305 value = pr->readLongArray( fieldName, len );
00306 }
00307
00308 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, float* value,
00309 int32_t len )
00310 {
00311 pw->writeFloatArray( fieldName, value, len );
00312 }
00313
00314 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, float*& value,
00315 int32_t& len )
00316 {
00317 value = pr->readFloatArray( fieldName, len );
00318 }
00319
00320 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, double* value,
00321 int32_t len )
00322 {
00323 pw->writeDoubleArray( fieldName, value, len );
00324 }
00325
00326 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, double*& value,
00327 int32_t& len )
00328 {
00329 value = pr->readDoubleArray( fieldName, len );
00330 }
00331
00332 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, char** value,
00333 int32_t len )
00334 {
00335 pw->writeStringArray( fieldName, value, len );
00336 }
00337
00338 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, char**& value,
00339 int32_t& len )
00340 {
00341 value = pr->readStringArray( fieldName, len );
00342 }
00343
00344 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, wchar_t** value,
00345 int32_t len )
00346 {
00347 pw->writeWideStringArray( fieldName, value, len );
00348 }
00349
00350 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, wchar_t**& value,
00351 int32_t& len )
00352 {
00353 value = pr->readWideStringArray( fieldName, len );
00354 }
00355
00356 inline void writePdxObject( gemfire::PdxWriterPtr& pw, const char* fieldName, CacheableObjectArrayPtr value)
00357 {
00358 pw->writeObjectArray( fieldName, value);
00359 }
00360
00361 inline void readPdxObject( gemfire::PdxReaderPtr& pr, const char* fieldName, CacheableObjectArrayPtr& value )
00362 {
00363 value = pr->readObjectArray( fieldName);
00364 }
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524 }
00525 }
00526
00527
00528 #endif // _GEMFIRE_SERIALIZER_HPP_