-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstring_container.cpp
More file actions
59 lines (46 loc) · 1.51 KB
/
string_container.cpp
File metadata and controls
59 lines (46 loc) · 1.51 KB
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
#include "string_container.h"
StringContainer::StringContainer()
: data_(nullptr)
, size_(0)
, offset_(0) {
}
void StringContainer::loadData() {
testString_ = "aBitLongTestingString";
}
char *StringContainer::serialize() {
size_t serializedStringSize = testString_.size() + testString_.size() * sizeof(char);
size_t serializedDataSize = serializedStringSize + 1;
// Reserve memory for data.
size_ = serializedDataSize;
data_ = new char[size_];
offset_ = 0;
// Serialize string size.
size_t stringSize = testString_.size();
memcpy(data_ + offset_, &stringSize, sizeof(stringSize));
offset_ += sizeof(stringSize);
//Serialize string data.
size_t stringDataCount = testString_.size() * sizeof(char);
memcpy(data_ + offset_, testString_.data(), stringDataCount);
offset_ += stringDataCount;
return data_;
}
void StringContainer::deserialize(char* data, int size) {
data_ = data;
size_ = size;
offset_ = 0;
// Deserialize string size.
size_t stringSize = 0;
memcpy(&stringSize, data_ + offset_, sizeof(stringSize));
testString_.resize(stringSize);
offset_ += sizeof(stringSize);
// Deserialize string data.
size_t stringDataCount = stringSize * sizeof(char);
memcpy(&testString_[0], data_ + offset_, stringDataCount);
offset_ += stringDataCount;
}
int StringContainer::getSerializedSize() const {
return size_;
}
const std::string& StringContainer::getString() const {
return testString_;
}