react-native-mmkv 3.3.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.
Files changed (87) hide show
  1. package/android/CMakeLists.txt +18 -9
  2. package/android/build.gradle +6 -2
  3. package/cpp/{MMKVManagedBuffer.h → ManagedMMBuffer.h} +6 -6
  4. package/cpp/MmkvHostObject.cpp +13 -8
  5. package/cpp/MmkvHostObject.h +1 -2
  6. package/cpp/MmkvTypes.h +50 -0
  7. package/cpp/NativeMmkvModule.cpp +3 -3
  8. package/cpp/NativeMmkvModule.h +1 -8
  9. package/package.json +22 -23
  10. package/react-native-mmkv.podspec +3 -9
  11. package/react-native.config.js +9 -0
  12. package/MMKV/Core/CMakeLists.txt +0 -172
  13. package/MMKV/Core/CodedInputData.cpp +0 -252
  14. package/MMKV/Core/CodedInputData.h +0 -87
  15. package/MMKV/Core/CodedInputDataCrypt.cpp +0 -280
  16. package/MMKV/Core/CodedInputDataCrypt.h +0 -87
  17. package/MMKV/Core/CodedInputDataCrypt_OSX.cpp +0 -62
  18. package/MMKV/Core/CodedInputData_OSX.cpp +0 -92
  19. package/MMKV/Core/CodedOutputData.cpp +0 -186
  20. package/MMKV/Core/CodedOutputData.h +0 -88
  21. package/MMKV/Core/Core.xcodeproj/project.pbxproj +0 -707
  22. package/MMKV/Core/Core.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  23. package/MMKV/Core/Core.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  24. package/MMKV/Core/Core.xcodeproj/xcshareddata/xcschemes/Core.xcscheme +0 -67
  25. package/MMKV/Core/Core.xcodeproj/xcshareddata/xcschemes/MMKVWatchCore.xcscheme +0 -67
  26. package/MMKV/Core/InterProcessLock.cpp +0 -186
  27. package/MMKV/Core/InterProcessLock.h +0 -119
  28. package/MMKV/Core/InterProcessLock_Android.cpp +0 -103
  29. package/MMKV/Core/InterProcessLock_Win32.cpp +0 -108
  30. package/MMKV/Core/KeyValueHolder.cpp +0 -236
  31. package/MMKV/Core/KeyValueHolder.h +0 -122
  32. package/MMKV/Core/MMBuffer.cpp +0 -210
  33. package/MMKV/Core/MMBuffer.h +0 -111
  34. package/MMKV/Core/MMKV.cpp +0 -1702
  35. package/MMKV/Core/MMKV.h +0 -595
  36. package/MMKV/Core/MMKVLog.cpp +0 -127
  37. package/MMKV/Core/MMKVLog.h +0 -86
  38. package/MMKV/Core/MMKVLog_Android.cpp +0 -134
  39. package/MMKV/Core/MMKVMetaInfo.hpp +0 -99
  40. package/MMKV/Core/MMKVPredef.h +0 -293
  41. package/MMKV/Core/MMKV_Android.cpp +0 -261
  42. package/MMKV/Core/MMKV_IO.cpp +0 -1905
  43. package/MMKV/Core/MMKV_IO.h +0 -57
  44. package/MMKV/Core/MMKV_OSX.cpp +0 -423
  45. package/MMKV/Core/MMKV_OSX.h +0 -57
  46. package/MMKV/Core/MemoryFile.cpp +0 -603
  47. package/MMKV/Core/MemoryFile.h +0 -194
  48. package/MMKV/Core/MemoryFile_Android.cpp +0 -236
  49. package/MMKV/Core/MemoryFile_Linux.cpp +0 -125
  50. package/MMKV/Core/MemoryFile_OSX.cpp +0 -142
  51. package/MMKV/Core/MemoryFile_Win32.cpp +0 -554
  52. package/MMKV/Core/MiniPBCoder.cpp +0 -672
  53. package/MMKV/Core/MiniPBCoder.h +0 -151
  54. package/MMKV/Core/MiniPBCoder_OSX.cpp +0 -237
  55. package/MMKV/Core/PBEncodeItem.hpp +0 -104
  56. package/MMKV/Core/PBUtility.cpp +0 -61
  57. package/MMKV/Core/PBUtility.h +0 -148
  58. package/MMKV/Core/ScopedLock.hpp +0 -69
  59. package/MMKV/Core/ThreadLock.cpp +0 -75
  60. package/MMKV/Core/ThreadLock.h +0 -81
  61. package/MMKV/Core/ThreadLock_Win32.cpp +0 -89
  62. package/MMKV/Core/aes/AESCrypt.cpp +0 -273
  63. package/MMKV/Core/aes/AESCrypt.h +0 -112
  64. package/MMKV/Core/aes/openssl/openssl_aes-armv4.S +0 -1243
  65. package/MMKV/Core/aes/openssl/openssl_aes.h +0 -130
  66. package/MMKV/Core/aes/openssl/openssl_aes_core.cpp +0 -1044
  67. package/MMKV/Core/aes/openssl/openssl_aes_locl.h +0 -38
  68. package/MMKV/Core/aes/openssl/openssl_aesv8-armx.S +0 -308
  69. package/MMKV/Core/aes/openssl/openssl_arm_arch.h +0 -84
  70. package/MMKV/Core/aes/openssl/openssl_cfb128.cpp +0 -97
  71. package/MMKV/Core/aes/openssl/openssl_md32_common.h +0 -254
  72. package/MMKV/Core/aes/openssl/openssl_md5.h +0 -49
  73. package/MMKV/Core/aes/openssl/openssl_md5_dgst.cpp +0 -166
  74. package/MMKV/Core/aes/openssl/openssl_md5_locl.h +0 -75
  75. package/MMKV/Core/aes/openssl/openssl_md5_one.cpp +0 -30
  76. package/MMKV/Core/aes/openssl/openssl_opensslconf.h +0 -271
  77. package/MMKV/Core/core.vcxproj +0 -288
  78. package/MMKV/Core/core.vcxproj.filters +0 -150
  79. package/MMKV/Core/crc32/Checksum.h +0 -75
  80. package/MMKV/Core/crc32/crc32_armv8.cpp +0 -134
  81. package/MMKV/Core/crc32/zlib/CMakeLists.txt +0 -60
  82. package/MMKV/Core/crc32/zlib/crc32.cpp +0 -55
  83. package/MMKV/Core/crc32/zlib/crc32.h +0 -48
  84. package/MMKV/Core/crc32/zlib/zconf.h +0 -380
  85. package/MMKV/Core/crc32/zlib/zutil.h +0 -25
  86. package/MMKV/LICENSE.TXT +0 -193
  87. 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