| 1010 | } |
| 1011 | |
| 1012 | auto BTreeDatabase::reserveBlock() -> BlockIndex { |
| 1013 | if (m_availableBlocks.empty()) { |
| 1014 | if (m_headFreeIndexBlock != InvalidBlockIndex) { |
| 1015 | // If available, make available all the blocks in the first free index |
| 1016 | // block. |
| 1017 | FreeIndexBlock indexBlock = readFreeIndexBlock(m_headFreeIndexBlock); |
| 1018 | for (auto const& b : indexBlock.freeBlocks) |
| 1019 | m_availableBlocks.add(b); |
| 1020 | m_availableBlocks.add(m_headFreeIndexBlock); |
| 1021 | m_headFreeIndexBlock = indexBlock.nextFreeBlock; |
| 1022 | } |
| 1023 | |
| 1024 | if (m_availableBlocks.empty()) { |
| 1025 | // If we still don't have any available blocks, just add a block to the |
| 1026 | // end of the file. |
| 1027 | m_availableBlocks.add(makeEndBlock()); |
| 1028 | } |
| 1029 | } |
| 1030 | |
| 1031 | BlockIndex block = m_availableBlocks.takeFirst(); |
| 1032 | m_uncommitted.add(block); |
| 1033 | return block; |
| 1034 | } |
| 1035 | |
| 1036 | auto BTreeDatabase::makeEndBlock() -> BlockIndex { |
| 1037 | BlockIndex blockCount = (m_deviceSize - HeaderSize) / m_blockSize; |
no test coverage detected