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