forked from trustwallet/wallet-core
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathTWData.cpp
More file actions
90 lines (74 loc) · 3.23 KB
/
Copy pathTWData.cpp
File metadata and controls
90 lines (74 loc) · 3.23 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
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
#include <TrustWalletCore/TWData.h>
#include <algorithm>
#include <vector>
TWData *_Nonnull TWDataCreateWithBytes(const uint8_t *_Nonnull bytes, size_t size) {
auto data = new std::vector<uint8_t>();
data->reserve(size);
std::copy(bytes, bytes + size, std::back_inserter(*data));
return data;
}
TWData *_Nonnull TWDataCreateWithSize(size_t size) {
auto data = new std::vector<uint8_t>(size, 0);
return data;
}
TWData *_Nonnull TWDataCreateWithData(TWData *_Nonnull data) {
auto other = reinterpret_cast<const std::vector<uint8_t>*>(data);
auto copy = new std::vector<uint8_t>(*other);
return copy;
}
size_t TWDataSize(TWData *_Nonnull data) {
auto v = reinterpret_cast<const std::vector<uint8_t>*>(data);
return v->size();
}
uint8_t *_Nonnull TWDataBytes(TWData *_Nonnull data) {
auto v = const_cast<std::vector<uint8_t>*>(reinterpret_cast<const std::vector<uint8_t>*>(data));
return v->data();
}
uint8_t TWDataGet(TWData *_Nonnull data, size_t index) {
auto v = reinterpret_cast<const std::vector<uint8_t>*>(data);
return (*v)[index];
}
void TWDataSet(TWData *_Nonnull data, size_t index, uint8_t byte) {
auto v = const_cast<std::vector<uint8_t>*>(reinterpret_cast<const std::vector<uint8_t>*>(data));
(*v)[index] = byte;
}
void TWDataCopyBytes(TWData *_Nonnull data, size_t start, size_t size, uint8_t *_Nonnull output) {
auto v = reinterpret_cast<const std::vector<uint8_t>*>(data);
std::copy(std::begin(*v) + start, std::begin(*v) + start + size, output);
}
void TWDataReplaceBytes(TWData *_Nonnull data, size_t start, size_t size, const uint8_t *_Nonnull bytes) {
auto v = const_cast<std::vector<uint8_t>*>(reinterpret_cast<const std::vector<uint8_t>*>(data));
std::copy(bytes, bytes + size, std::begin(*v) + start);
}
void TWDataAppendBytes(TWData *_Nonnull data, const uint8_t *_Nonnull bytes, size_t size) {
auto v = const_cast<std::vector<uint8_t>*>(reinterpret_cast<const std::vector<uint8_t>*>(data));
for (auto i = 0; i < size; i += 1)
v->push_back(bytes[i]);
}
void TWDataAppendByte(TWData *_Nonnull data, uint8_t byte) {
auto v = const_cast<std::vector<uint8_t>*>(reinterpret_cast<const std::vector<uint8_t>*>(data));
v->push_back(byte);
}
void TWDataAppendData(TWData *_Nonnull data, TWData *_Nonnull append) {
auto v = const_cast<std::vector<uint8_t>*>(reinterpret_cast<const std::vector<uint8_t>*>(data));
auto av = reinterpret_cast<const std::vector<uint8_t>*>(append);
for (auto& b : *av)
v->push_back(b);
}
void TWDataReverse(TWData *_Nonnull data) {
auto v = const_cast<std::vector<uint8_t>*>(reinterpret_cast<const std::vector<uint8_t>*>(data));
std::reverse(std::begin(*v), std::end(*v));
}
void TWDataReset(TWData *_Nonnull data) {
auto v = const_cast<std::vector<uint8_t>*>(reinterpret_cast<const std::vector<uint8_t>*>(data));
std::fill(std::begin(*v), std::end(*v), 0);
}
void TWDataDelete(TWData *_Nonnull data) {
auto v = reinterpret_cast<const std::vector<uint8_t>*>(data);
delete v;
}
bool TWDataEqual(TWData *_Nonnull lhs, TWData *_Nonnull rhs) {
auto lv = reinterpret_cast<const std::vector<uint8_t>*>(lhs);
auto rv = reinterpret_cast<const std::vector<uint8_t>*>(rhs);
return *lv == *rv;
}