145 void checkBufferSize(
int sincr);
152 const string& readString();
153 void readString(
string& str,
int num_chars);
154 void readCharArray(
char* array,
int num_chars);
160 uByte readByte(
int pos);
161 void readByteArray(uByte* array,
int num_bytes);
168 bool readBool(
int pos);
169 void readBoolArray(
bool* array,
int num_bools);
176 int readInt32(
int pos);
178 void readIntArray(
int* array,
int num_ints);
186 int64 readInt64(
int pos);
187 int64 readRawInt64();
188 void readLongArray(int64* array,
int num_longs);
196 float readFloat(
int pos);
197 float readRawFloat();
198 void readFloatArray(
float* array,
int num_floats);
206 double readDouble(
int pos);
207 double readRawDouble();
208 void readDoubleArray(
double* array,
int num_doubles);
215 void writeString(
const string& in_string);
216 void writeString(
char* char_string);
217 void writeCharArray(
const char* array,
int num_chars);
223 void writeByte(uByte b);
224 void writeByte(uByte b,
int pos);
225 void writeRawByte(uByte b);
226 void writeByteArray(
const uByte* array,
int num_bytes);
234 void writeBool(
bool b);
235 void writeBool(
bool b,
int pos);
236 void writeRawBool(
bool b);
237 void writeBoolArray(
const bool* array,
int num_bools);
245 void writeInt32(
int i);
246 void writeInt32(
int i,
int pos);
247 void writeRawInt32(
int i);
248 void writeIntArray(
const int* array,
int num_ints);
256 void writeInt64(int64 i);
257 void writeInt64(int64 i,
int pos);
258 void writeRawInt64(int64 i);
259 void writeLongArray(
const int64* array,
int num_longs);
267 void writeFloat(
float f);
268 void writeFloat(
float f,
int pos);
269 void writeRawFloat(
float f);
270 void writeFloatArray(
const float* array,
int num_floats);
278 void writeDouble(
double d);
279 void writeDouble(
double d,
int pos);
280 void writeRawDouble(
double d);
281 void writeDoubleArray(
const double* array,
int num_doubles);
300 static void reverseBO2(
char* d);
301 static void reverseBO4(
char* d);
302 static void reverseBO8(
char* d);
308 static string class_name();
309 virtual string get_class_name()
const;
310 virtual int class_size()
const;
313 void setSize(
int num_bytes);
324 void incrementPos(
int increment);
325 void decrementPos(
int decrement);
328 string getData()
const;
331 int getCapacity()
const;
334 char* getPosPointer();
338 char* getPosPointer(
int pos);
341 void setByteOrderReverse(
bool bor);
342 void byteOrderReverseOn();
343 void byteOrderReverseOff();
352 bool isByteOrderReversed()
const;
362 void reserve(
int sze);
406 inline string DataBuffer::class_name()
416 inline string DataBuffer::get_class_name()
const
426 inline int DataBuffer::class_size()
const
437 inline void DataBuffer::align4Byte()
441 int sm = dbDataPos %
sizeof(int);
445 if (sm && dbPad) dbDataPos +=
sizeof(int) - sm;
454 inline void DataBuffer::align8Byte()
458 int sm = dbDataPos %
sizeof(double);
462 if (sm && dbPad) dbDataPos +=
sizeof(double) - sm;
472 inline void DataBuffer::checkBufferSize(
int sincr)
477 if (dbDataPos + sincr > (
int) dbData->size())
478 dbData->append(dbDataPos + sincr - dbData->size(),
' ');
486 inline void DataBuffer::clear()
504 inline const string& DataBuffer::readString()
512 s = dbData->substr(dbDataPos, len);
523 inline void DataBuffer::readString(
string& str,
int num_chars)
527 str = dbData->substr(dbDataPos, num_chars);
528 dbDataPos += num_chars;
536 inline void DataBuffer::readCharArray(
char* array,
int num_chars)
540 memcpy(array, &(*dbData)[dbDataPos], num_chars);
541 dbDataPos += num_chars;
549 inline uByte DataBuffer::readByte()
553 uByte b = *((uByte*) &(*dbData)[dbDataPos]);
554 dbDataPos +=
sizeof(uByte);
564 inline uByte DataBuffer::readByte(
int pos)
568 uByte b = *((uByte*) &(*dbData)[pos]);
577 inline void DataBuffer::readByteArray(uByte* array,
int num_bytes)
581 memcpy(array, &(*dbData)[dbDataPos], num_bytes);
582 dbDataPos += num_bytes;
590 inline bool DataBuffer::readBool()
594 bool b = *((
bool*) &(*dbData)[dbDataPos]);
595 dbDataPos +=
sizeof(bool);
605 inline bool DataBuffer::readBool(
int pos)
609 bool b = *((
bool*) &(*dbData)[pos]);
618 inline void DataBuffer::readBoolArray(
bool* array,
int num_bools)
622 memcpy(array, &(*dbData)[dbDataPos], num_bools);
623 dbDataPos += num_bools;
632 inline int DataBuffer::readInt32()
640 return readRawInt32();
649 inline int DataBuffer::readInt32(
int pos)
653 int i = *((
int*) &(*dbData)[pos]);
654 if (dbReverse) reverseBO4((
char*) &i);
664 inline int DataBuffer::readRawInt32()
668 int i = *((
int*) &(*dbData)[dbDataPos]);
669 if (dbReverse) reverseBO4((
char*) &i);
670 dbDataPos +=
sizeof(int);
679 inline void DataBuffer::readIntArray(
int* array,
int num_ints)
681 int num_bytes = num_ints *
sizeof(int);
688 memcpy(array, &(*dbData)[dbDataPos], num_bytes);
689 if (dbReverse) reverseBO4Array(num_ints, (
char*) array);
690 dbDataPos += num_bytes;
699 inline int64 DataBuffer::readInt64()
707 return readRawInt64();
716 inline int64 DataBuffer::readInt64(
int pos)
720 int64 i = *((int64*) &(*dbData)[pos]);
721 if (dbReverse) reverseBO8((
char*) &i);
731 inline int64 DataBuffer::readRawInt64()
735 int64 i = *((int64*) &(*dbData)[dbDataPos]);
736 if (dbReverse) reverseBO8((
char*) &i);
737 dbDataPos +=
sizeof(int64);
746 inline void DataBuffer::readLongArray(int64* array,
int num_longs)
748 int num_bytes = num_longs *
sizeof(int64);
756 memcpy(array, &(*dbData)[dbDataPos], num_bytes);
757 if (dbReverse) reverseBO8Array(num_longs, (
char*) array);
758 dbDataPos += num_bytes;
767 inline float DataBuffer::readFloat()
775 return readRawFloat();
784 inline float DataBuffer::readFloat(
int pos)
788 float f = *((
float*) &(*dbData)[pos]);
789 if (dbReverse) reverseBO4((
char*) &f);
799 inline float DataBuffer::readRawFloat()
803 float f = *((
float*) &(*dbData)[dbDataPos]);
804 if (dbReverse) reverseBO4((
char*) &f);
805 dbDataPos +=
sizeof(float);
814 inline void DataBuffer::readFloatArray(
float* array,
int num_floats)
816 int num_bytes = num_floats *
sizeof(float);
824 memcpy(array, &(*dbData)[dbDataPos], num_bytes);
825 if (dbReverse) reverseBO4Array(num_floats, (
char*) array);
826 dbDataPos += num_bytes;
835 inline double DataBuffer::readDouble()
843 return readRawDouble();
852 inline double DataBuffer::readDouble(
int pos)
856 double d = *((
double*) &(*dbData)[pos]);
857 if (dbReverse) reverseBO8((
char*) &d);
867 inline double DataBuffer::readRawDouble()
871 double d = *((
double*) &(*dbData)[dbDataPos]);
872 if (dbReverse) reverseBO8((
char*) &d);
873 dbDataPos +=
sizeof(double);
882 inline void DataBuffer::readDoubleArray(
double* array,
int num_doubles)
884 int num_bytes = num_doubles *
sizeof(double);
892 memcpy(array, &(*dbData)[dbDataPos], num_bytes);
893 if (dbReverse) reverseBO8Array(num_doubles, (
char*) array);
894 dbDataPos += num_bytes;
906 inline void DataBuffer::writeString(
const string& in_string)
910 int sz = (int) in_string.size() +
sizeof(int);
922 writeRawInt32((
int) in_string.size());
929 memcpy(&(*dbData)[dbDataPos], &in_string[0], in_string.size());
931 dbDataPos += (int) in_string.size();
939 inline void DataBuffer::writeString(
char* char_string)
941 string tmp_string = char_string;
942 writeString(tmp_string);
950 inline void DataBuffer::writeCharArray(
const char* array,
int num_chars)
954 checkBufferSize(num_chars);
958 memcpy(&(*dbData)[dbDataPos], array, num_chars);
959 dbDataPos += num_chars;
968 inline void DataBuffer::writeByte(uByte b)
972 checkBufferSize(
sizeof(uByte));
985 inline void DataBuffer::writeByte(uByte b,
int pos)
989 *((uByte*) &(*dbData)[pos]) = b;
999 inline void DataBuffer::writeRawByte(uByte b)
1003 *((uByte*) &(*dbData)[dbDataPos]) = b;
1004 dbDataPos +=
sizeof(uByte);
1012 inline void DataBuffer::writeByteArray(
const uByte* array,
int num_bytes)
1016 checkBufferSize(num_bytes);
1020 memcpy(&(*dbData)[dbDataPos], array, num_bytes);
1021 dbDataPos += num_bytes;
1030 inline void DataBuffer::writeBool(
bool b)
1034 checkBufferSize(
sizeof(
bool));
1047 inline void DataBuffer::writeBool(
bool b,
int pos)
1051 *((
bool*) &(*dbData)[pos]) = b;
1061 inline void DataBuffer::writeRawBool(
bool b)
1065 *((
bool*) &(*dbData)[dbDataPos]) = b;
1066 dbDataPos +=
sizeof(bool);
1074 inline void DataBuffer::writeBoolArray(
const bool* array,
int num_bools)
1078 checkBufferSize(num_bools);
1082 memcpy(&(*dbData)[dbDataPos], array, num_bools);
1083 dbDataPos += num_bools;
1092 inline void DataBuffer::writeInt32(
int i)
1100 checkBufferSize(
sizeof(
int));
1113 inline void DataBuffer::writeInt32(
int i,
int pos)
1117 if (dbReverse) reverseBO4((
char*) &i);
1118 *((
int*) &(*dbData)[pos]) = i;
1128 inline void DataBuffer::writeRawInt32(
int i)
1132 if (dbReverse) reverseBO4((
char*) &i);
1133 *((
int*) &(*dbData)[dbDataPos]) = i;
1134 dbDataPos +=
sizeof(int);
1142 inline void DataBuffer::writeIntArray(
const int* array,
int num_ints)
1144 int num_bytes = num_ints *
sizeof(int);
1152 checkBufferSize(num_bytes);
1156 memcpy(&(*dbData)[dbDataPos], array, num_bytes);
1157 if (dbReverse) reverseBO4Array(num_ints, &(*dbData)[dbDataPos]);
1158 dbDataPos += num_bytes;
1167 inline void DataBuffer::writeInt64(int64 i)
1175 checkBufferSize(
sizeof(int64));
1188 inline void DataBuffer::writeInt64(int64 i,
int pos)
1192 if (dbReverse) reverseBO8((
char*) &i);
1193 *((int64*) &(*dbData)[pos]) = i;
1203 inline void DataBuffer::writeRawInt64 (int64 i)
1207 if (dbReverse) reverseBO8((
char*) &i);
1208 *((int64*) &(*dbData)[dbDataPos]) = i;
1209 dbDataPos +=
sizeof(int64);
1217 inline void DataBuffer::writeLongArray(
const int64* array,
int num_longs)
1219 int num_bytes = num_longs *
sizeof(int64);
1227 checkBufferSize(num_bytes);
1231 memcpy(&(*dbData)[dbDataPos], array, num_bytes);
1232 if (dbReverse) reverseBO8Array(num_longs, &(*dbData)[dbDataPos]);
1233 dbDataPos += num_bytes;
1242 inline void DataBuffer::writeFloat(
float f)
1250 checkBufferSize(
sizeof(
float));
1263 inline void DataBuffer::writeFloat(
float f,
int pos)
1267 if (dbReverse) reverseBO4((
char*) &f);
1268 *((
float*) &(*dbData)[pos]) = f;
1278 inline void DataBuffer::writeRawFloat(
float f)
1282 if (dbReverse) reverseBO4((
char*) &f);
1283 *((
float*) &(*dbData)[dbDataPos]) = f;
1284 dbDataPos +=
sizeof(float);
1292 inline void DataBuffer::writeFloatArray(
const float* array,
int num_floats)
1294 int num_bytes = num_floats *
sizeof(float);
1302 checkBufferSize(num_bytes);
1306 memcpy(&(*dbData)[dbDataPos], array, num_bytes);
1307 if (dbReverse) reverseBO4Array(num_floats, &(*dbData)[dbDataPos]);
1308 dbDataPos += num_bytes;
1317 inline void DataBuffer::writeDouble(
double d)
1325 checkBufferSize(
sizeof(
double));
1338 inline void DataBuffer::writeDouble(
double d,
int pos)
1342 if (dbReverse) reverseBO8((
char*) &d);
1343 *((
double*) &(*dbData)[pos]) = d;
1353 inline void DataBuffer::writeRawDouble(
double d)
1357 if (dbReverse) reverseBO8((
char*) &d);
1358 *((
double*) &(*dbData)[dbDataPos]) = d;
1359 dbDataPos +=
sizeof(double);
1368 inline void DataBuffer::writeDoubleArray(
const double* array,
int num_doubles)
1370 int num_bytes = num_doubles *
sizeof(double);
1378 checkBufferSize(num_bytes);
1382 memcpy(&(*dbData)[dbDataPos], array, num_bytes);
1383 if (dbReverse) reverseBO8Array(num_doubles, &(*dbData)[dbDataPos]);
1384 dbDataPos += num_bytes;
1396 inline void DataBuffer::setSize(
int num_bytes)
1398 dbData->resize(num_bytes);
1406 inline int DataBuffer::size()
1410 if (dbDataPos > dbSize)
1421 inline void DataBuffer::resetPos()
1423 if (dbDataPos > dbSize)
1436 inline void DataBuffer::setPosToEnd()
1438 if (dbDataPos > dbSize)
1449 inline int DataBuffer::getPos()
const
1461 inline void DataBuffer::incrementPos(
int increment)
1463 dbDataPos += increment;
1472 inline void DataBuffer::decrementPos(
int decrement)
1474 dbDataPos -= decrement;
1482 inline string DataBuffer::getData()
const
1492 inline int DataBuffer::getCapacity()
const
1494 return (
int) dbData->capacity();
1502 inline char* DataBuffer::getPosPointer()
1504 char* p = &(*dbData)[dbDataPos];
1513 inline char* DataBuffer::getPosPointer(
int pos)
1515 char* p = &(*dbData)[pos];
1524 inline void DataBuffer::reverseBO2(
char* d)
1536 inline void DataBuffer::reverseBO4(
char* d)
1552 inline void DataBuffer::reverseBO8(
char* d)
1576 inline void DataBuffer::setByteOrderReverse(
bool bor)
1586 inline void DataBuffer::byteOrderReverseOn()
1596 inline void DataBuffer::byteOrderReverseOff()
1607 inline bool DataBuffer::isByteOrderReversed()
const
1619 inline void DataBuffer::reserve(
int sze)
1621 dbData->reserve(sze);
A byte array container used to hold binary data in the same manner as disk based file system.
int dbSize
The current size of the data container.
DataBuffer(const DataBuffer &db)
bool dbPad
A boolean, that if true, maintains 4 and 8 byte alignment in support of double alignment compilation.
string generateMD5HashKey()
string * dbData
A string object is used to contain the actual data.
int dbDataPos
The current iterator position in the data container (dbData).
void writeToFile(fstream &ofs)
bool dbOwnStr
A boolean, that if true, indicates the storage string for this DataBuffer is owned and therefore dele...
void readFromFile(ifstream &ifs, int64 filePos, int num_bytes)
bool dbReverse
A boolean, that if true, reverses the byte order of all 2, 4, and 8 byte intrinsics (shorts,...
void readFromFile(ifstream &ifs, int num_bytes)
static void reverseBO4Array(int n, char *a)
static void reverseBO8Array(int n, char *a)
void readFromFile(fstream &ifs, int num_bytes)
const string & readMD5HashKey()
void readFromFile(fstream &ifs, int64 filePos, int num_bytes)
DataBuffer & operator=(const DataBuffer &db)
void writeToFile(ofstream &ofs)
string generateDataBufMD5HashKey()
static void reverseBOArray(int n, char *a, int s)
static const int ALLOCATION_REQ_SIZE
Default allocation requirement size for a data buffer.
static void reverseBO2Array(int n, char *a)
static int getAllocationReqSize()