react-native-mmkv 3.2.0 → 4.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/CMakeLists.txt +18 -9
- package/android/build.gradle +6 -2
- package/cpp/{MMKVManagedBuffer.h → ManagedMMBuffer.h} +6 -6
- package/cpp/MmkvHostObject.cpp +22 -17
- package/cpp/MmkvHostObject.h +1 -2
- package/cpp/MmkvTypes.h +50 -0
- package/cpp/NativeMmkvModule.cpp +3 -3
- package/cpp/NativeMmkvModule.h +1 -8
- package/lib/commonjs/MMKV.js.map +1 -1
- package/lib/commonjs/Types.js.map +1 -1
- package/lib/commonjs/createMMKV.web.js +1 -1
- package/lib/commonjs/createMMKV.web.js.map +1 -1
- package/lib/module/MMKV.js.map +1 -1
- package/lib/module/Types.js.map +1 -1
- package/lib/module/createMMKV.web.js +1 -1
- package/lib/module/createMMKV.web.js.map +1 -1
- package/lib/typescript/src/MMKV.d.ts +1 -1
- package/lib/typescript/src/MMKV.d.ts.map +1 -1
- package/lib/typescript/src/Types.d.ts +7 -1
- package/lib/typescript/src/Types.d.ts.map +1 -1
- package/lib/typescript/src/hooks.d.ts +1 -1
- package/lib/typescript/src/hooks.d.ts.map +1 -1
- package/package.json +22 -27
- package/react-native-mmkv.podspec +4 -10
- package/react-native.config.js +9 -0
- package/src/MMKV.ts +1 -1
- package/src/Types.ts +7 -1
- package/src/createMMKV.web.ts +1 -1
- package/src/hooks.ts +1 -1
- package/MMKV/Core/CMakeLists.txt +0 -172
- package/MMKV/Core/CodedInputData.cpp +0 -252
- package/MMKV/Core/CodedInputData.h +0 -87
- package/MMKV/Core/CodedInputDataCrypt.cpp +0 -280
- package/MMKV/Core/CodedInputDataCrypt.h +0 -87
- package/MMKV/Core/CodedInputDataCrypt_OSX.cpp +0 -62
- package/MMKV/Core/CodedInputData_OSX.cpp +0 -92
- package/MMKV/Core/CodedOutputData.cpp +0 -186
- package/MMKV/Core/CodedOutputData.h +0 -88
- package/MMKV/Core/Core.xcodeproj/project.pbxproj +0 -707
- package/MMKV/Core/Core.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/MMKV/Core/Core.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/MMKV/Core/Core.xcodeproj/xcshareddata/xcschemes/Core.xcscheme +0 -67
- package/MMKV/Core/Core.xcodeproj/xcshareddata/xcschemes/MMKVWatchCore.xcscheme +0 -67
- package/MMKV/Core/InterProcessLock.cpp +0 -186
- package/MMKV/Core/InterProcessLock.h +0 -119
- package/MMKV/Core/InterProcessLock_Android.cpp +0 -103
- package/MMKV/Core/InterProcessLock_Win32.cpp +0 -108
- package/MMKV/Core/KeyValueHolder.cpp +0 -236
- package/MMKV/Core/KeyValueHolder.h +0 -122
- package/MMKV/Core/MMBuffer.cpp +0 -210
- package/MMKV/Core/MMBuffer.h +0 -111
- package/MMKV/Core/MMKV.cpp +0 -1702
- package/MMKV/Core/MMKV.h +0 -595
- package/MMKV/Core/MMKVLog.cpp +0 -127
- package/MMKV/Core/MMKVLog.h +0 -86
- package/MMKV/Core/MMKVLog_Android.cpp +0 -134
- package/MMKV/Core/MMKVMetaInfo.hpp +0 -99
- package/MMKV/Core/MMKVPredef.h +0 -293
- package/MMKV/Core/MMKV_Android.cpp +0 -261
- package/MMKV/Core/MMKV_IO.cpp +0 -1905
- package/MMKV/Core/MMKV_IO.h +0 -57
- package/MMKV/Core/MMKV_OSX.cpp +0 -423
- package/MMKV/Core/MMKV_OSX.h +0 -57
- package/MMKV/Core/MemoryFile.cpp +0 -603
- package/MMKV/Core/MemoryFile.h +0 -194
- package/MMKV/Core/MemoryFile_Android.cpp +0 -236
- package/MMKV/Core/MemoryFile_Linux.cpp +0 -125
- package/MMKV/Core/MemoryFile_OSX.cpp +0 -142
- package/MMKV/Core/MemoryFile_Win32.cpp +0 -554
- package/MMKV/Core/MiniPBCoder.cpp +0 -672
- package/MMKV/Core/MiniPBCoder.h +0 -151
- package/MMKV/Core/MiniPBCoder_OSX.cpp +0 -237
- package/MMKV/Core/PBEncodeItem.hpp +0 -104
- package/MMKV/Core/PBUtility.cpp +0 -61
- package/MMKV/Core/PBUtility.h +0 -148
- package/MMKV/Core/ScopedLock.hpp +0 -69
- package/MMKV/Core/ThreadLock.cpp +0 -75
- package/MMKV/Core/ThreadLock.h +0 -81
- package/MMKV/Core/ThreadLock_Win32.cpp +0 -89
- package/MMKV/Core/aes/AESCrypt.cpp +0 -273
- package/MMKV/Core/aes/AESCrypt.h +0 -112
- package/MMKV/Core/aes/openssl/openssl_aes-armv4.S +0 -1243
- package/MMKV/Core/aes/openssl/openssl_aes.h +0 -130
- package/MMKV/Core/aes/openssl/openssl_aes_core.cpp +0 -1044
- package/MMKV/Core/aes/openssl/openssl_aes_locl.h +0 -38
- package/MMKV/Core/aes/openssl/openssl_aesv8-armx.S +0 -308
- package/MMKV/Core/aes/openssl/openssl_arm_arch.h +0 -84
- package/MMKV/Core/aes/openssl/openssl_cfb128.cpp +0 -97
- package/MMKV/Core/aes/openssl/openssl_md32_common.h +0 -254
- package/MMKV/Core/aes/openssl/openssl_md5.h +0 -49
- package/MMKV/Core/aes/openssl/openssl_md5_dgst.cpp +0 -166
- package/MMKV/Core/aes/openssl/openssl_md5_locl.h +0 -75
- package/MMKV/Core/aes/openssl/openssl_md5_one.cpp +0 -30
- package/MMKV/Core/aes/openssl/openssl_opensslconf.h +0 -271
- package/MMKV/Core/core.vcxproj +0 -288
- package/MMKV/Core/core.vcxproj.filters +0 -150
- package/MMKV/Core/crc32/Checksum.h +0 -75
- package/MMKV/Core/crc32/crc32_armv8.cpp +0 -134
- package/MMKV/Core/crc32/zlib/CMakeLists.txt +0 -60
- package/MMKV/Core/crc32/zlib/crc32.cpp +0 -55
- package/MMKV/Core/crc32/zlib/crc32.h +0 -48
- package/MMKV/Core/crc32/zlib/zconf.h +0 -380
- package/MMKV/Core/crc32/zlib/zutil.h +0 -25
- package/MMKV/README.md +0 -354
|
@@ -1,672 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Tencent is pleased to support the open source community by making
|
|
3
|
-
* MMKV available.
|
|
4
|
-
*
|
|
5
|
-
* Copyright (C) 2018 THL A29 Limited, a Tencent company.
|
|
6
|
-
* All rights reserved.
|
|
7
|
-
*
|
|
8
|
-
* Licensed under the BSD 3-Clause License (the "License"); you may not use
|
|
9
|
-
* this file except in compliance with the License. You may obtain a copy of
|
|
10
|
-
* the License at
|
|
11
|
-
*
|
|
12
|
-
* https://opensource.org/licenses/BSD-3-Clause
|
|
13
|
-
*
|
|
14
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
15
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
-
* See the License for the specific language governing permissions and
|
|
18
|
-
* limitations under the License.
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
#include "MiniPBCoder.h"
|
|
22
|
-
#include "CodedInputData.h"
|
|
23
|
-
#include "CodedInputDataCrypt.h"
|
|
24
|
-
#include "CodedOutputData.h"
|
|
25
|
-
#include "PBEncodeItem.hpp"
|
|
26
|
-
#include "PBUtility.h"
|
|
27
|
-
#include "MMKVLog.h"
|
|
28
|
-
|
|
29
|
-
#ifdef MMKV_APPLE
|
|
30
|
-
# if __has_feature(objc_arc)
|
|
31
|
-
# error This file must be compiled with MRC. Use -fno-objc-arc flag.
|
|
32
|
-
# endif
|
|
33
|
-
#endif // MMKV_APPLE
|
|
34
|
-
|
|
35
|
-
using namespace std;
|
|
36
|
-
|
|
37
|
-
namespace mmkv {
|
|
38
|
-
|
|
39
|
-
MiniPBCoder::MiniPBCoder() : m_encodeItems(new std::vector<PBEncodeItem>()) {
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
MiniPBCoder::MiniPBCoder(const MMBuffer *inputBuffer, AESCrypt *crypter) : MiniPBCoder() {
|
|
43
|
-
m_inputBuffer = inputBuffer;
|
|
44
|
-
#ifndef MMKV_DISABLE_CRYPT
|
|
45
|
-
if (crypter) {
|
|
46
|
-
m_inputDataDecrpt = new CodedInputDataCrypt(m_inputBuffer->getPtr(), m_inputBuffer->length(), *crypter);
|
|
47
|
-
} else {
|
|
48
|
-
m_inputData = new CodedInputData(m_inputBuffer->getPtr(), m_inputBuffer->length());
|
|
49
|
-
}
|
|
50
|
-
#else
|
|
51
|
-
m_inputData = new CodedInputData(m_inputBuffer->getPtr(), m_inputBuffer->length());
|
|
52
|
-
#endif // MMKV_DISABLE_CRYPT
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
MiniPBCoder::~MiniPBCoder() {
|
|
56
|
-
delete m_inputData;
|
|
57
|
-
#ifndef MMKV_DISABLE_CRYPT
|
|
58
|
-
delete m_inputDataDecrpt;
|
|
59
|
-
#endif
|
|
60
|
-
delete m_outputBuffer;
|
|
61
|
-
delete m_outputData;
|
|
62
|
-
delete m_encodeItems;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// encode
|
|
66
|
-
|
|
67
|
-
// write object using prepared m_encodeItems[]
|
|
68
|
-
void MiniPBCoder::writeRootObject() {
|
|
69
|
-
for (size_t index = 0, total = m_encodeItems->size(); index < total; index++) {
|
|
70
|
-
PBEncodeItem *encodeItem = &(*m_encodeItems)[index];
|
|
71
|
-
switch (encodeItem->type) {
|
|
72
|
-
case PBEncodeItemType_Data: {
|
|
73
|
-
m_outputData->writeData(*(encodeItem->value.bufferValue));
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
case PBEncodeItemType_Container: {
|
|
77
|
-
m_outputData->writeUInt32(encodeItem->valueSize);
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
#ifndef MMKV_APPLE
|
|
81
|
-
#ifdef MMKV_HAS_CPP20
|
|
82
|
-
case PBEncodeItemType_Int32: {
|
|
83
|
-
m_outputData->writeInt32(encodeItem->value.int32Value);
|
|
84
|
-
break;
|
|
85
|
-
}
|
|
86
|
-
case PBEncodeItemType_UInt32: {
|
|
87
|
-
m_outputData->writeUInt32(encodeItem->value.uint32Value);
|
|
88
|
-
break;
|
|
89
|
-
}
|
|
90
|
-
case PBEncodeItemType_Int64: {
|
|
91
|
-
m_outputData->writeInt64(encodeItem->value.int64Value);
|
|
92
|
-
break;
|
|
93
|
-
}
|
|
94
|
-
case PBEncodeItemType_UInt64: {
|
|
95
|
-
m_outputData->writeUInt64(encodeItem->value.uint64Value);
|
|
96
|
-
break;
|
|
97
|
-
}
|
|
98
|
-
#endif // MMKV_HAS_CPP20
|
|
99
|
-
case PBEncodeItemType_String: {
|
|
100
|
-
m_outputData->writeString(*(encodeItem->value.strValue));
|
|
101
|
-
break;
|
|
102
|
-
}
|
|
103
|
-
#else
|
|
104
|
-
case PBEncodeItemType_NSString: {
|
|
105
|
-
m_outputData->writeUInt32(encodeItem->valueSize);
|
|
106
|
-
if (encodeItem->valueSize > 0 && encodeItem->value.tmpObjectValue != nullptr) {
|
|
107
|
-
auto obj = (__bridge NSData *) encodeItem->value.tmpObjectValue;
|
|
108
|
-
MMBuffer buffer(obj, MMBufferNoCopy);
|
|
109
|
-
m_outputData->writeRawData(buffer);
|
|
110
|
-
}
|
|
111
|
-
break;
|
|
112
|
-
}
|
|
113
|
-
case PBEncodeItemType_NSData: {
|
|
114
|
-
m_outputData->writeUInt32(encodeItem->valueSize);
|
|
115
|
-
if (encodeItem->valueSize > 0 && encodeItem->value.objectValue != nullptr) {
|
|
116
|
-
auto obj = (__bridge NSData *) encodeItem->value.objectValue;
|
|
117
|
-
MMBuffer buffer(obj, MMBufferNoCopy);
|
|
118
|
-
m_outputData->writeRawData(buffer);
|
|
119
|
-
}
|
|
120
|
-
break;
|
|
121
|
-
}
|
|
122
|
-
case PBEncodeItemType_NSDate: {
|
|
123
|
-
NSDate *oDate = (__bridge NSDate *) encodeItem->value.objectValue;
|
|
124
|
-
m_outputData->writeDouble(oDate.timeIntervalSince1970);
|
|
125
|
-
break;
|
|
126
|
-
}
|
|
127
|
-
#endif // MMKV_APPLE
|
|
128
|
-
case PBEncodeItemType_None: {
|
|
129
|
-
MMKVError("%d", encodeItem->type);
|
|
130
|
-
break;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
size_t MiniPBCoder::prepareObjectForEncode(const MMBuffer &buffer) {
|
|
137
|
-
m_encodeItems->push_back(PBEncodeItem());
|
|
138
|
-
PBEncodeItem *encodeItem = &(m_encodeItems->back());
|
|
139
|
-
size_t index = m_encodeItems->size() - 1;
|
|
140
|
-
{
|
|
141
|
-
encodeItem->type = PBEncodeItemType_Data;
|
|
142
|
-
encodeItem->value.bufferValue = &buffer;
|
|
143
|
-
encodeItem->valueSize = static_cast<uint32_t>(buffer.length());
|
|
144
|
-
}
|
|
145
|
-
encodeItem->compiledSize = pbRawVarint32Size(encodeItem->valueSize) + encodeItem->valueSize;
|
|
146
|
-
|
|
147
|
-
return index;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
size_t MiniPBCoder::prepareObjectForEncode(const MMKVVector &vec) {
|
|
151
|
-
m_encodeItems->push_back(PBEncodeItem());
|
|
152
|
-
PBEncodeItem *encodeItem = &(m_encodeItems->back());
|
|
153
|
-
size_t index = m_encodeItems->size() - 1;
|
|
154
|
-
{
|
|
155
|
-
encodeItem->type = PBEncodeItemType_Container;
|
|
156
|
-
encodeItem->value.bufferValue = nullptr;
|
|
157
|
-
|
|
158
|
-
for (const auto &itr : vec) {
|
|
159
|
-
const auto &key = itr.first;
|
|
160
|
-
const auto &value = itr.second;
|
|
161
|
-
# ifdef MMKV_APPLE
|
|
162
|
-
if (key.length <= 0) {
|
|
163
|
-
# else
|
|
164
|
-
if (key.length() <= 0) {
|
|
165
|
-
# endif
|
|
166
|
-
continue;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
size_t keyIndex = prepareObjectForEncode(key);
|
|
170
|
-
if (keyIndex < m_encodeItems->size()) {
|
|
171
|
-
size_t valueIndex = prepareObjectForEncode(value);
|
|
172
|
-
if (valueIndex < m_encodeItems->size()) {
|
|
173
|
-
(*m_encodeItems)[index].valueSize += (*m_encodeItems)[keyIndex].compiledSize;
|
|
174
|
-
(*m_encodeItems)[index].valueSize += (*m_encodeItems)[valueIndex].compiledSize;
|
|
175
|
-
} else {
|
|
176
|
-
m_encodeItems->pop_back(); // pop key
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
encodeItem = &(*m_encodeItems)[index];
|
|
182
|
-
}
|
|
183
|
-
encodeItem->compiledSize = pbRawVarint32Size(encodeItem->valueSize) + encodeItem->valueSize;
|
|
184
|
-
|
|
185
|
-
return index;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
MMBuffer MiniPBCoder::writePreparedItems(size_t index) {
|
|
189
|
-
try {
|
|
190
|
-
PBEncodeItem *oItem = (index < m_encodeItems->size()) ? &(*m_encodeItems)[index] : nullptr;
|
|
191
|
-
if (oItem && oItem->compiledSize > 0) {
|
|
192
|
-
m_outputBuffer = new MMBuffer(oItem->compiledSize);
|
|
193
|
-
m_outputData = new CodedOutputData(m_outputBuffer->getPtr(), m_outputBuffer->length());
|
|
194
|
-
|
|
195
|
-
writeRootObject();
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
return std::move(*m_outputBuffer);
|
|
199
|
-
} catch (const std::exception &exception) {
|
|
200
|
-
MMKVError("%s", exception.what());
|
|
201
|
-
return MMBuffer();
|
|
202
|
-
} catch (...) {
|
|
203
|
-
MMKVError("encode fail");
|
|
204
|
-
return MMBuffer();
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
MMBuffer MiniPBCoder::encodeDataWithObject(const MMBuffer &obj) {
|
|
209
|
-
try {
|
|
210
|
-
auto valueSize = static_cast<uint32_t>(obj.length());
|
|
211
|
-
auto compiledSize = pbRawVarint32Size(valueSize) + valueSize;
|
|
212
|
-
MMBuffer result(compiledSize);
|
|
213
|
-
CodedOutputData output(result.getPtr(), result.length());
|
|
214
|
-
output.writeData(obj);
|
|
215
|
-
return result;
|
|
216
|
-
} catch (const std::exception &exception) {
|
|
217
|
-
MMKVError("%s", exception.what());
|
|
218
|
-
return MMBuffer();
|
|
219
|
-
} catch (...) {
|
|
220
|
-
MMKVError("prepare encode fail");
|
|
221
|
-
return MMBuffer();
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
#ifndef MMKV_APPLE
|
|
226
|
-
|
|
227
|
-
size_t MiniPBCoder::prepareObjectForEncode(const string &str) {
|
|
228
|
-
m_encodeItems->push_back(PBEncodeItem());
|
|
229
|
-
PBEncodeItem *encodeItem = &(m_encodeItems->back());
|
|
230
|
-
size_t index = m_encodeItems->size() - 1;
|
|
231
|
-
{
|
|
232
|
-
encodeItem->type = PBEncodeItemType_String;
|
|
233
|
-
encodeItem->value.strValue = &str;
|
|
234
|
-
encodeItem->valueSize = static_cast<int32_t>(str.size());
|
|
235
|
-
}
|
|
236
|
-
encodeItem->compiledSize = pbRawVarint32Size(encodeItem->valueSize) + encodeItem->valueSize;
|
|
237
|
-
|
|
238
|
-
return index;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
size_t MiniPBCoder::prepareObjectForEncode(const MMKV_STRING_CONTAINER &v) {
|
|
242
|
-
m_encodeItems->push_back(PBEncodeItem());
|
|
243
|
-
PBEncodeItem *encodeItem = &(m_encodeItems->back());
|
|
244
|
-
size_t index = m_encodeItems->size() - 1;
|
|
245
|
-
{
|
|
246
|
-
encodeItem->type = PBEncodeItemType_Container;
|
|
247
|
-
encodeItem->value.bufferValue = nullptr;
|
|
248
|
-
|
|
249
|
-
for (const auto &str : v) {
|
|
250
|
-
size_t itemIndex = prepareObjectForEncode(str);
|
|
251
|
-
if (itemIndex < m_encodeItems->size()) {
|
|
252
|
-
(*m_encodeItems)[index].valueSize += (*m_encodeItems)[itemIndex].compiledSize;
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
encodeItem = &(*m_encodeItems)[index];
|
|
257
|
-
}
|
|
258
|
-
encodeItem->compiledSize = pbRawVarint32Size(encodeItem->valueSize) + encodeItem->valueSize;
|
|
259
|
-
|
|
260
|
-
return index;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
#ifdef MMKV_HAS_CPP20
|
|
264
|
-
|
|
265
|
-
size_t MiniPBCoder::prepareObjectForEncode(const std::span<const int32_t> &vec) {
|
|
266
|
-
m_encodeItems->push_back(PBEncodeItem());
|
|
267
|
-
PBEncodeItem *encodeItem = &(m_encodeItems->back());
|
|
268
|
-
size_t index = m_encodeItems->size() - 1;
|
|
269
|
-
{
|
|
270
|
-
encodeItem->type = PBEncodeItemType_Container;
|
|
271
|
-
encodeItem->value.bufferValue = nullptr;
|
|
272
|
-
|
|
273
|
-
for (const auto value : vec) {
|
|
274
|
-
PBEncodeItem item;
|
|
275
|
-
item.type = PBEncodeItemType_Int32;
|
|
276
|
-
item.value.int32Value = value;
|
|
277
|
-
item.compiledSize = pbInt32Size(value);
|
|
278
|
-
|
|
279
|
-
(*m_encodeItems)[index].valueSize += item.compiledSize;
|
|
280
|
-
m_encodeItems->push_back(std::move(item));
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
encodeItem = &(*m_encodeItems)[index];
|
|
284
|
-
}
|
|
285
|
-
encodeItem->compiledSize = pbRawVarint32Size(encodeItem->valueSize) + encodeItem->valueSize;
|
|
286
|
-
|
|
287
|
-
return index;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
size_t MiniPBCoder::prepareObjectForEncode(const std::span<const uint32_t> &vec) {
|
|
291
|
-
m_encodeItems->push_back(PBEncodeItem());
|
|
292
|
-
PBEncodeItem *encodeItem = &(m_encodeItems->back());
|
|
293
|
-
size_t index = m_encodeItems->size() - 1;
|
|
294
|
-
{
|
|
295
|
-
encodeItem->type = PBEncodeItemType_Container;
|
|
296
|
-
encodeItem->value.bufferValue = nullptr;
|
|
297
|
-
|
|
298
|
-
for (const auto value : vec) {
|
|
299
|
-
PBEncodeItem item;
|
|
300
|
-
item.type = PBEncodeItemType_UInt32;
|
|
301
|
-
item.value.uint32Value = value;
|
|
302
|
-
item.compiledSize = pbUInt32Size(value);
|
|
303
|
-
|
|
304
|
-
(*m_encodeItems)[index].valueSize += item.compiledSize;
|
|
305
|
-
m_encodeItems->push_back(std::move(item));
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
encodeItem = &(*m_encodeItems)[index];
|
|
309
|
-
}
|
|
310
|
-
encodeItem->compiledSize = pbRawVarint32Size(encodeItem->valueSize) + encodeItem->valueSize;
|
|
311
|
-
|
|
312
|
-
return index;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
size_t MiniPBCoder::prepareObjectForEncode(const std::span<const int64_t> &vec) {
|
|
316
|
-
m_encodeItems->push_back(PBEncodeItem());
|
|
317
|
-
PBEncodeItem *encodeItem = &(m_encodeItems->back());
|
|
318
|
-
size_t index = m_encodeItems->size() - 1;
|
|
319
|
-
{
|
|
320
|
-
encodeItem->type = PBEncodeItemType_Container;
|
|
321
|
-
encodeItem->value.bufferValue = nullptr;
|
|
322
|
-
|
|
323
|
-
for (const auto value : vec) {
|
|
324
|
-
PBEncodeItem item;
|
|
325
|
-
item.type = PBEncodeItemType_Int64;
|
|
326
|
-
item.value.int64Value = value;
|
|
327
|
-
item.compiledSize = pbInt64Size(value);
|
|
328
|
-
|
|
329
|
-
(*m_encodeItems)[index].valueSize += item.compiledSize;
|
|
330
|
-
m_encodeItems->push_back(std::move(item));
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
encodeItem = &(*m_encodeItems)[index];
|
|
334
|
-
}
|
|
335
|
-
encodeItem->compiledSize = pbRawVarint32Size(encodeItem->valueSize) + encodeItem->valueSize;
|
|
336
|
-
|
|
337
|
-
return index;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
size_t MiniPBCoder::prepareObjectForEncode(const std::span<const uint64_t> &vec) {
|
|
341
|
-
m_encodeItems->push_back(PBEncodeItem());
|
|
342
|
-
PBEncodeItem *encodeItem = &(m_encodeItems->back());
|
|
343
|
-
size_t index = m_encodeItems->size() - 1;
|
|
344
|
-
{
|
|
345
|
-
encodeItem->type = PBEncodeItemType_Container;
|
|
346
|
-
encodeItem->value.bufferValue = nullptr;
|
|
347
|
-
|
|
348
|
-
for (const auto value : vec) {
|
|
349
|
-
PBEncodeItem item;
|
|
350
|
-
item.type = PBEncodeItemType_UInt64;
|
|
351
|
-
item.value.uint64Value = value;
|
|
352
|
-
item.compiledSize = pbUInt64Size(value);
|
|
353
|
-
|
|
354
|
-
(*m_encodeItems)[index].valueSize += item.compiledSize;
|
|
355
|
-
m_encodeItems->push_back(std::move(item));
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
encodeItem = &(*m_encodeItems)[index];
|
|
359
|
-
}
|
|
360
|
-
encodeItem->compiledSize = pbRawVarint32Size(encodeItem->valueSize) + encodeItem->valueSize;
|
|
361
|
-
|
|
362
|
-
return index;
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
#endif // MMKV_HAS_CPP20
|
|
366
|
-
|
|
367
|
-
vector<string> MiniPBCoder::decodeOneVector() {
|
|
368
|
-
vector<string> v;
|
|
369
|
-
|
|
370
|
-
m_inputData->readInt32();
|
|
371
|
-
|
|
372
|
-
while (!m_inputData->isAtEnd()) {
|
|
373
|
-
auto value = m_inputData->readString();
|
|
374
|
-
v.push_back(std::move(value));
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
return v;
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
#ifdef MMKV_HAS_CPP20
|
|
381
|
-
|
|
382
|
-
bool MiniPBCoder::decodeOneVector(std::vector<bool> &result) {
|
|
383
|
-
try {
|
|
384
|
-
auto size = m_inputData->readInt32();
|
|
385
|
-
result.reserve(size / pbBoolSize());
|
|
386
|
-
|
|
387
|
-
while (!m_inputData->isAtEnd()) {
|
|
388
|
-
auto value = m_inputData->readBool();
|
|
389
|
-
result.push_back(value);
|
|
390
|
-
}
|
|
391
|
-
return true;
|
|
392
|
-
} catch (std::exception &exception) {
|
|
393
|
-
MMKVError("%s", exception.what());
|
|
394
|
-
} catch (...) {
|
|
395
|
-
MMKVError("decode fail");
|
|
396
|
-
}
|
|
397
|
-
return false;
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
bool MiniPBCoder::decodeOneVector(std::vector<int32_t> &result) {
|
|
401
|
-
try {
|
|
402
|
-
m_inputData->readInt32();
|
|
403
|
-
|
|
404
|
-
while (!m_inputData->isAtEnd()) {
|
|
405
|
-
auto value = m_inputData->readInt32();
|
|
406
|
-
result.push_back(value);
|
|
407
|
-
}
|
|
408
|
-
return true;
|
|
409
|
-
} catch (std::exception &exception) {
|
|
410
|
-
MMKVError("%s", exception.what());
|
|
411
|
-
} catch (...) {
|
|
412
|
-
MMKVError("decode fail");
|
|
413
|
-
}
|
|
414
|
-
return false;
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
bool MiniPBCoder::decodeOneVector(std::vector<uint32_t> &result) {
|
|
418
|
-
try {
|
|
419
|
-
m_inputData->readInt32();
|
|
420
|
-
|
|
421
|
-
while (!m_inputData->isAtEnd()) {
|
|
422
|
-
auto value = m_inputData->readUInt32();
|
|
423
|
-
result.push_back(value);
|
|
424
|
-
}
|
|
425
|
-
return true;
|
|
426
|
-
} catch (std::exception &exception) {
|
|
427
|
-
MMKVError("%s", exception.what());
|
|
428
|
-
} catch (...) {
|
|
429
|
-
MMKVError("decode fail");
|
|
430
|
-
}
|
|
431
|
-
return false;
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
bool MiniPBCoder::decodeOneVector(std::vector<int64_t> &result) {
|
|
435
|
-
try {
|
|
436
|
-
m_inputData->readInt32();
|
|
437
|
-
|
|
438
|
-
while (!m_inputData->isAtEnd()) {
|
|
439
|
-
auto value = m_inputData->readInt64();
|
|
440
|
-
result.push_back(value);
|
|
441
|
-
}
|
|
442
|
-
return true;
|
|
443
|
-
} catch (std::exception &exception) {
|
|
444
|
-
MMKVError("%s", exception.what());
|
|
445
|
-
} catch (...) {
|
|
446
|
-
MMKVError("decode fail");
|
|
447
|
-
}
|
|
448
|
-
return false;
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
bool MiniPBCoder::decodeOneVector(std::vector<uint64_t> &result) {
|
|
452
|
-
try {
|
|
453
|
-
m_inputData->readInt32();
|
|
454
|
-
|
|
455
|
-
while (!m_inputData->isAtEnd()) {
|
|
456
|
-
auto value = m_inputData->readUInt64();
|
|
457
|
-
result.push_back(value);
|
|
458
|
-
}
|
|
459
|
-
return true;
|
|
460
|
-
} catch (std::exception &exception) {
|
|
461
|
-
MMKVError("%s", exception.what());
|
|
462
|
-
} catch (...) {
|
|
463
|
-
MMKVError("decode fail");
|
|
464
|
-
}
|
|
465
|
-
return false;
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
bool MiniPBCoder::decodeOneVector(std::vector<float> &result) {
|
|
469
|
-
try {
|
|
470
|
-
auto size = m_inputData->readInt32();
|
|
471
|
-
result.reserve(size / pbFloatSize());
|
|
472
|
-
|
|
473
|
-
while (!m_inputData->isAtEnd()) {
|
|
474
|
-
auto value = m_inputData->readFloat();
|
|
475
|
-
result.push_back(value);
|
|
476
|
-
}
|
|
477
|
-
return true;
|
|
478
|
-
} catch (std::exception &exception) {
|
|
479
|
-
MMKVError("%s", exception.what());
|
|
480
|
-
} catch (...) {
|
|
481
|
-
MMKVError("decode fail");
|
|
482
|
-
}
|
|
483
|
-
return false;
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
bool MiniPBCoder::decodeOneVector(std::vector<double> &result) {
|
|
487
|
-
try {
|
|
488
|
-
auto size = m_inputData->readInt32();
|
|
489
|
-
result.reserve(size / pbDoubleSize());
|
|
490
|
-
|
|
491
|
-
while (!m_inputData->isAtEnd()) {
|
|
492
|
-
auto value = m_inputData->readDouble();
|
|
493
|
-
result.push_back(value);
|
|
494
|
-
}
|
|
495
|
-
return true;
|
|
496
|
-
} catch (std::exception &exception) {
|
|
497
|
-
MMKVError("%s", exception.what());
|
|
498
|
-
} catch (...) {
|
|
499
|
-
MMKVError("decode fail");
|
|
500
|
-
}
|
|
501
|
-
return false;
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
#endif // MMKV_HAS_CPP20
|
|
505
|
-
|
|
506
|
-
void MiniPBCoder::decodeOneMap(MMKVMap &dic, size_t position, bool greedy) {
|
|
507
|
-
auto block = [position, this](MMKVMap &dictionary) {
|
|
508
|
-
if (position) {
|
|
509
|
-
m_inputData->seek(position);
|
|
510
|
-
} else {
|
|
511
|
-
m_inputData->readInt32();
|
|
512
|
-
}
|
|
513
|
-
while (!m_inputData->isAtEnd()) {
|
|
514
|
-
KeyValueHolder kvHolder;
|
|
515
|
-
const auto &key = m_inputData->readString(kvHolder);
|
|
516
|
-
if (key.length() > 0) {
|
|
517
|
-
m_inputData->readData(kvHolder);
|
|
518
|
-
if (kvHolder.valueSize > 0) {
|
|
519
|
-
dictionary[key] = std::move(kvHolder);
|
|
520
|
-
} else {
|
|
521
|
-
auto itr = dictionary.find(key);
|
|
522
|
-
if (itr != dictionary.end()) {
|
|
523
|
-
dictionary.erase(itr);
|
|
524
|
-
}
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
};
|
|
529
|
-
|
|
530
|
-
if (greedy) {
|
|
531
|
-
try {
|
|
532
|
-
block(dic);
|
|
533
|
-
} catch (std::exception &exception) {
|
|
534
|
-
MMKVError("%s", exception.what());
|
|
535
|
-
} catch (...) {
|
|
536
|
-
MMKVError("prepare encode fail");
|
|
537
|
-
}
|
|
538
|
-
} else {
|
|
539
|
-
try {
|
|
540
|
-
MMKVMap tmpDic;
|
|
541
|
-
block(tmpDic);
|
|
542
|
-
dic.swap(tmpDic);
|
|
543
|
-
} catch (std::exception &exception) {
|
|
544
|
-
MMKVError("%s", exception.what());
|
|
545
|
-
} catch (...) {
|
|
546
|
-
MMKVError("prepare encode fail");
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
|
|
551
|
-
# ifndef MMKV_DISABLE_CRYPT
|
|
552
|
-
|
|
553
|
-
void MiniPBCoder::decodeOneMap(MMKVMapCrypt &dic, size_t position, bool greedy) {
|
|
554
|
-
auto block = [position, this](MMKVMapCrypt &dictionary) {
|
|
555
|
-
if (position) {
|
|
556
|
-
m_inputDataDecrpt->seek(position);
|
|
557
|
-
} else {
|
|
558
|
-
m_inputDataDecrpt->readInt32();
|
|
559
|
-
}
|
|
560
|
-
while (!m_inputDataDecrpt->isAtEnd()) {
|
|
561
|
-
KeyValueHolderCrypt kvHolder;
|
|
562
|
-
const auto &key = m_inputDataDecrpt->readString(kvHolder);
|
|
563
|
-
if (key.length() > 0) {
|
|
564
|
-
m_inputDataDecrpt->readData(kvHolder);
|
|
565
|
-
if (kvHolder.realValueSize() > 0) {
|
|
566
|
-
dictionary[key] = std::move(kvHolder);
|
|
567
|
-
} else {
|
|
568
|
-
auto itr = dictionary.find(key);
|
|
569
|
-
if (itr != dictionary.end()) {
|
|
570
|
-
dictionary.erase(itr);
|
|
571
|
-
}
|
|
572
|
-
}
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
};
|
|
576
|
-
|
|
577
|
-
if (greedy) {
|
|
578
|
-
try {
|
|
579
|
-
block(dic);
|
|
580
|
-
} catch (std::exception &exception) {
|
|
581
|
-
MMKVError("%s", exception.what());
|
|
582
|
-
} catch (...) {
|
|
583
|
-
MMKVError("prepare encode fail");
|
|
584
|
-
}
|
|
585
|
-
} else {
|
|
586
|
-
try {
|
|
587
|
-
MMKVMapCrypt tmpDic;
|
|
588
|
-
block(tmpDic);
|
|
589
|
-
dic.swap(tmpDic);
|
|
590
|
-
} catch (std::exception &exception) {
|
|
591
|
-
MMKVError("%s", exception.what());
|
|
592
|
-
} catch (...) {
|
|
593
|
-
MMKVError("prepare encode fail");
|
|
594
|
-
}
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
# endif // MMKV_DISABLE_CRYPT
|
|
599
|
-
|
|
600
|
-
vector<string> MiniPBCoder::decodeVector(const MMBuffer &oData) {
|
|
601
|
-
MiniPBCoder oCoder(&oData);
|
|
602
|
-
return oCoder.decodeOneVector();
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
#ifdef MMKV_HAS_CPP20
|
|
606
|
-
MMBuffer MiniPBCoder::getEncodeData(const std::vector<bool> &value) {
|
|
607
|
-
auto valueLength = static_cast<uint32_t>(value.size() * pbBoolSize());
|
|
608
|
-
auto size = pbRawVarint32Size(valueLength) + valueLength;
|
|
609
|
-
auto buffer = MMBuffer(size);
|
|
610
|
-
CodedOutputData output(buffer.getPtr(), size);
|
|
611
|
-
output.writeUInt32(valueLength);
|
|
612
|
-
|
|
613
|
-
for (auto single : value) {
|
|
614
|
-
output.writeBool(single);
|
|
615
|
-
}
|
|
616
|
-
return buffer;
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
MMBuffer MiniPBCoder::getEncodeData(const std::span<const float> &value) {
|
|
620
|
-
auto valueLength = static_cast<uint32_t>(value.size() * pbFloatSize());
|
|
621
|
-
auto size = pbRawVarint32Size(valueLength) + valueLength;
|
|
622
|
-
auto buffer = MMBuffer(size);
|
|
623
|
-
CodedOutputData output(buffer.getPtr(), size);
|
|
624
|
-
output.writeUInt32(valueLength);
|
|
625
|
-
|
|
626
|
-
for (auto single : value) {
|
|
627
|
-
output.writeFloat(single);
|
|
628
|
-
}
|
|
629
|
-
return buffer;
|
|
630
|
-
}
|
|
631
|
-
|
|
632
|
-
MMBuffer MiniPBCoder::getEncodeData(const std::span<const double> &value) {
|
|
633
|
-
auto valueLength = static_cast<uint32_t>(value.size() * pbDoubleSize());
|
|
634
|
-
auto size = pbRawVarint32Size(valueLength) + valueLength;
|
|
635
|
-
auto buffer = MMBuffer(size);
|
|
636
|
-
CodedOutputData output(buffer.getPtr(), size);
|
|
637
|
-
output.writeUInt32(valueLength);
|
|
638
|
-
|
|
639
|
-
for (auto single : value) {
|
|
640
|
-
output.writeDouble(single);
|
|
641
|
-
}
|
|
642
|
-
return buffer;
|
|
643
|
-
}
|
|
644
|
-
#endif // MMKV_HAS_CPP20
|
|
645
|
-
|
|
646
|
-
#endif // !MMKV_APPLE
|
|
647
|
-
|
|
648
|
-
void MiniPBCoder::decodeMap(MMKVMap &dic, const MMBuffer &oData, size_t position) {
|
|
649
|
-
MiniPBCoder oCoder(&oData);
|
|
650
|
-
oCoder.decodeOneMap(dic, position, false);
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
void MiniPBCoder::greedyDecodeMap(MMKVMap &dic, const MMBuffer &oData, size_t position) {
|
|
654
|
-
MiniPBCoder oCoder(&oData);
|
|
655
|
-
oCoder.decodeOneMap(dic, position, true);
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
#ifndef MMKV_DISABLE_CRYPT
|
|
659
|
-
|
|
660
|
-
void MiniPBCoder::decodeMap(MMKVMapCrypt &dic, const MMBuffer &oData, AESCrypt *crypter, size_t position) {
|
|
661
|
-
MiniPBCoder oCoder(&oData, crypter);
|
|
662
|
-
oCoder.decodeOneMap(dic, position, false);
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
void MiniPBCoder::greedyDecodeMap(MMKVMapCrypt &dic, const MMBuffer &oData, AESCrypt *crypter, size_t position) {
|
|
666
|
-
MiniPBCoder oCoder(&oData, crypter);
|
|
667
|
-
oCoder.decodeOneMap(dic, position, true);
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
#endif
|
|
671
|
-
|
|
672
|
-
} // namespace mmkv
|