MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / reserveBlock

Method reserveBlock

source/core/StarBTreeDatabase.cpp:1012–1034  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1010}
1011
1012auto 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
1036auto BTreeDatabase::makeEndBlock() -> BlockIndex {
1037 BlockIndex blockCount = (m_deviceSize - HeaderSize) / m_blockSize;

Callers 2

storeIndexMethod · 0.80
storeLeafMethod · 0.80

Calls 3

emptyMethod · 0.45
addMethod · 0.45
takeFirstMethod · 0.45

Tested by

no test coverage detected