| 53 | |
| 54 | MiniPBCoder(); |
| 55 | explicit MiniPBCoder(const MMBuffer *inputBuffer, AESCrypt *crypter = nullptr); |
| 56 | ~MiniPBCoder(); |
| 57 | |
| 58 | void writeRootObject(); |
| 59 | |
| 60 | size_t prepareObjectForEncode(const MMKVVector &vec); |
| 61 | size_t prepareObjectForEncode(const MMBuffer &buffer); |
| 62 | |
| 63 | template <typename T> |
| 64 | MMBuffer getEncodeData(const T &obj) { |
| 65 | size_t index = prepareObjectForEncode(obj); |
| 66 | return writePreparedItems(index); |
| 67 | } |
| 68 | |
| 69 | MMBuffer writePreparedItems(size_t index); |
| 70 | |
| 71 | void decodeOneMap(MMKVMap &dic, size_t position, bool greedy); |
| 72 | #ifndef MMKV_DISABLE_CRYPT |
| 73 | void decodeOneMap(MMKVMapCrypt &dic, size_t position, bool greedy); |
| 74 | #endif |
| 75 | |
| 76 | size_t prepareObjectForEncode(const std::string &str); |
| 77 | size_t prepareObjectForEncode(const MMKV_STRING_CONTAINER &vector); |
| 78 | std::vector<std::string> decodeOneVector(); |
| 79 | #ifdef MMKV_HAS_CPP20 |
| 80 | size_t prepareObjectForEncode(const std::span<const int32_t> &vec); |
| 81 | size_t prepareObjectForEncode(const std::span<const uint32_t> &vec); |
| 82 | size_t prepareObjectForEncode(const std::span<const int64_t> &vec); |
| 83 | size_t prepareObjectForEncode(const std::span<const uint64_t> &vec); |
| 84 | |
| 85 | bool decodeOneVector(std::vector<bool> &result); |
| 86 | bool decodeOneVector(std::vector<int32_t> &result); |
| 87 | bool decodeOneVector(std::vector<uint32_t> &result); |
| 88 | bool decodeOneVector(std::vector<int64_t> &result); |
| 89 | bool decodeOneVector(std::vector<uint64_t> &result); |
| 90 | bool decodeOneVector(std::vector<float> &result); |
| 91 | bool decodeOneVector(std::vector<double> &result); |
| 92 | |
| 93 | // special case for fixed size types |
| 94 | MMBuffer getEncodeData(const std::vector<bool> &obj); |
| 95 | MMBuffer getEncodeData(const std::span<const float> &obj); |
| 96 | MMBuffer getEncodeData(const std::span<const double> &obj); |
| 97 | #endif // MMKV_HAS_CPP20 |
| 98 | |
| 99 | #if defined(MMKV_APPLE) && defined(__OBJC__) |
| 100 | // NSString, NSData, NSDate |
| 101 | size_t prepareObjectForEncode(__unsafe_unretained NSObject *obj); |
| 102 | #endif |
| 103 | |
| 104 | public: |
| 105 | template <typename T> |
| 106 | static MMBuffer encodeDataWithObject(const T &obj) { |
| 107 | MiniPBCoder pbCoder; |
| 108 | return pbCoder.getEncodeData(obj); |
| 109 | } |
| 110 | |
| 111 | // opt encoding a single MMBuffer |
| 112 | static MMBuffer encodeDataWithObject(const MMBuffer &obj); |
no test coverage detected