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
00039 #ifndef SERIALIZATION_TOOLS_HEADER
00040 #define SERIALIZATION_TOOLS_HEADER
00041
00042 #include <vector>
00043
00044
00045
00046 template <typename VectorType>
00047 size_t std_vector_getSize(const VectorType & v) {
00048
00049 size_t sizeOfOneElement = sizeof(typename VectorType::value_type);
00050 return sizeof(size_t) + v.size() * sizeOfOneElement;
00051 }
00052
00053 typedef char* CharPtrType;
00054
00055 template <typename VectorType>
00056 void std_vector_writeToBuffer_and_move_ptr(const VectorType & v, CharPtrType & p) {
00057 size_t nElements = v.size();
00058 memcpy(p, &nElements, sizeof(size_t));
00059 p += sizeof(size_t);
00060 size_t sizeOfOneElement = sizeof(typename VectorType::value_type);
00061 size_t sizeOfAllElements = v.size() * sizeOfOneElement;
00062 memcpy(p, &v[0], sizeOfAllElements);
00063 p += sizeOfAllElements;
00064 }
00065
00066 typedef const char* ConstCharPtrType;
00067
00068 template <typename VectorType>
00069 void std_vector_assignFromBuffer_and_move_ptr(VectorType & v, ConstCharPtrType & p, const char* bufEndPtr) {
00070 assert(bufEndPtr > p);
00071 size_t nBytesInBuffer = bufEndPtr - p;
00072 assert(nBytesInBuffer >= sizeof(size_t));
00073 size_t nElements;
00074 memcpy(&nElements, p, sizeof(size_t));
00075 p += sizeof(size_t);
00076
00077 size_t sizeOfOneElement = sizeof(typename VectorType::value_type);
00078 size_t sizeOfAllElements = nElements * sizeOfOneElement;
00079 assert(sizeOfAllElements + sizeof(size_t) <= nBytesInBuffer);
00080 v.resize(nElements);
00081 memcpy(&v[0], p, sizeOfAllElements);
00082 p += sizeOfAllElements;
00083 }
00084
00085
00086 #endif