MCPcopy Create free account
hub / github.com/Tencent/MMKV / partialLoadFromFile

Method partialLoadFromFile

Core/MMKV_IO.cpp:157–202  ·  view source on GitHub ↗

read from last m_position

Source from the content-addressed store, hash-verified

155
156// read from last m_position
157void MMKV::partialLoadFromFile() {
158 if (!m_file->isFileValid()) {
159 return;
160 }
161 m_metaInfo->read(m_metaFile->getMemory());
162
163 size_t oldActualSize = m_actualSize;
164 m_actualSize = readActualSize();
165 auto fileSize = m_file->getFileSize();
166 MMKVDebug("loading [%s] with file size %zu, oldActualSize %zu, newActualSize %zu", m_mmapID.c_str(), fileSize,
167 oldActualSize, m_actualSize);
168
169 if (m_actualSize > 0) {
170 if (m_actualSize < fileSize && m_actualSize + Fixed32Size <= fileSize) {
171 if (m_actualSize > oldActualSize) {
172 auto position = oldActualSize;
173 size_t addedSize = m_actualSize - position;
174 auto basePtr = (uint8_t *) m_file->getMemory() + Fixed32Size;
175 // incremental update crc digest
176 m_crcDigest = (uint32_t) CRC32(m_crcDigest, basePtr + position, (z_size_t) addedSize);
177 if (m_crcDigest == m_metaInfo->m_crcDigest) {
178 MMBuffer inputBuffer(basePtr, m_actualSize, MMBufferNoCopy);
179#ifndef MMKV_DISABLE_CRYPT
180 if (m_crypter) {
181 MiniPBCoder::greedyDecodeMap(*m_dicCrypt, inputBuffer, m_crypter, position);
182 } else
183#endif
184 {
185 MiniPBCoder::greedyDecodeMap(*m_dic, inputBuffer, position);
186 }
187 m_output->seek(addedSize);
188 m_hasFullWriteback = false;
189
190 [[maybe_unused]] auto count = m_crypter ? m_dicCrypt->size() : m_dic->size();
191 MMKVDebug("partial loaded [%s] with %zu values", m_mmapID.c_str(), count);
192 return;
193 } else {
194 MMKVError("m_crcDigest[%u] != m_metaInfo->m_crcDigest[%u]", m_crcDigest, m_metaInfo->m_crcDigest);
195 }
196 }
197 }
198 }
199 // something is wrong, do a full load
200 clearMemoryCache();
201 loadFromFile();
202}
203
204static bool deleteOrRenameFile(const MMKVPath_t &src) {
205 if (!deleteFile(src)) {

Callers

nothing calls this directly

Calls 6

readMethod · 0.80
getMemoryMethod · 0.80
getFileSizeMethod · 0.80
clearMemoryCacheFunction · 0.50
isFileValidMethod · 0.45
seekMethod · 0.45

Tested by

no test coverage detected