-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathserialization.cpp
112 lines (95 loc) · 2.48 KB
/
serialization.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include "serialization.h"
#include <string.h>
CSerialization::CSerialization()
{
_writing=true;
}
CSerialization::CSerialization(const unsigned char* data,size_t dataSize)
{
_writing=false;
_buffer=data;
_bufferSize=dataSize;
_readPos=0;
}
CSerialization::~CSerialization()
{
}
bool CSerialization::isWriting() const
{
return(_writing);
}
void CSerialization::writeFloat(float a)
{
_writeBuffer.push_back(((unsigned char*)&a)[0]);
_writeBuffer.push_back(((unsigned char*)&a)[1]);
_writeBuffer.push_back(((unsigned char*)&a)[2]);
_writeBuffer.push_back(((unsigned char*)&a)[3]);
}
void CSerialization::writeInt(int a)
{
_writeBuffer.push_back(((unsigned char*)&a)[0]);
_writeBuffer.push_back(((unsigned char*)&a)[1]);
_writeBuffer.push_back(((unsigned char*)&a)[2]);
_writeBuffer.push_back(((unsigned char*)&a)[3]);
}
void CSerialization::writeUInt(unsigned int a)
{
_writeBuffer.push_back(((unsigned char*)&a)[0]);
_writeBuffer.push_back(((unsigned char*)&a)[1]);
_writeBuffer.push_back(((unsigned char*)&a)[2]);
_writeBuffer.push_back(((unsigned char*)&a)[3]);
}
void CSerialization::writeWord(unsigned short a)
{
_writeBuffer.push_back(((unsigned char*)&a)[0]);
_writeBuffer.push_back(((unsigned char*)&a)[1]);
}
void CSerialization::writeByte(unsigned char a)
{
_writeBuffer.push_back(a);
}
void CSerialization::writeChar(char a)
{
_writeBuffer.push_back((unsigned char)a);
}
void CSerialization::writeString(const char* string)
{
for (int i=0;i<int(strlen(string));i++)
_writeBuffer.push_back((unsigned char)string[i]);
_writeBuffer.push_back(0);
}
unsigned char* CSerialization::getWriteBuffer(size_t& bufferLength)
{
bufferLength=_writeBuffer.size();
return(&_writeBuffer[0]);
}
size_t CSerialization::getReadPos() const
{
return(_readPos);
}
unsigned char CSerialization::readByte()
{
return(_buffer[_readPos++]);
}
int CSerialization::readInt()
{
unsigned char tmp[sizeof(int)];
for (size_t i=0;i<sizeof(int);i++)
tmp[i]=_buffer[_readPos++];
return((reinterpret_cast<int*>(&tmp))[0]);
}
float CSerialization::readFloat()
{
unsigned char tmp[sizeof(float)];
for (size_t i=0;i<sizeof(float);i++)
tmp[i]=_buffer[_readPos++];
return((reinterpret_cast<float*>(&tmp))[0]);
}
std::string CSerialization::readString()
{
std::string retVal;
while (_buffer[_readPos]!=0)
retVal+=char(_buffer[_readPos++]);
_readPos++;
return(retVal);
}