/* * Tencent is pleased to support the open source community by making * MMKV available. * * Copyright (C) 2018 THL A29 Limited, a Tencent company. * All rights reserved. * * Licensed under the BSD 3-Clause License (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of * the License at * * https://opensource.org/licenses/BSD-3-Clause * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef MMKV_MMKVMETAINFO_H #define MMKV_MMKVMETAINFO_H #ifdef __cplusplus #include "aes/AESCrypt.h" #include #include namespace mmkv { enum MMKVVersion : uint32_t { MMKVVersionDefault = 0, // record full write back count MMKVVersionSequence = 1, // store random iv for encryption MMKVVersionRandomIV = 2, // store actual size together with crc checksum, try to reduce file corruption MMKVVersionActualSize = 3, }; struct MMKVMetaInfo { uint32_t m_crcDigest = 0; uint32_t m_version = MMKVVersionSequence; uint32_t m_sequence = 0; // full write-back count uint8_t m_vector[AES_KEY_LEN] = {}; uint32_t m_actualSize = 0; // confirmed info: it's been synced to file struct { uint32_t lastActualSize = 0; uint32_t lastCRCDigest = 0; uint32_t _reserved[16] = {}; } m_lastConfirmedMetaInfo; void write(void *ptr) const { MMKV_ASSERT(ptr); memcpy(ptr, this, sizeof(MMKVMetaInfo)); } void writeCRCAndActualSizeOnly(void *ptr) const { MMKV_ASSERT(ptr); auto other = (MMKVMetaInfo *) ptr; other->m_crcDigest = m_crcDigest; other->m_actualSize = m_actualSize; } void read(const void *ptr) { MMKV_ASSERT(ptr); memcpy(this, ptr, sizeof(MMKVMetaInfo)); } }; static_assert(sizeof(MMKVMetaInfo) <= (4 * 1024), "MMKVMetaInfo lager than one pagesize"); } // namespace mmkv #endif #endif //MMKV_MMKVMETAINFO_H