react-native-mmkv 3.3.0 → 4.0.0-beta.1

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