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

Method readFreeIndexBlock

source/core/StarBTreeDatabase.cpp:922–948  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

920}
921
922auto BTreeDatabase::readFreeIndexBlock(BlockIndex blockIndex) -> FreeIndexBlock {
923 checkBlockIndex(blockIndex);
924
925 ByteArray magic(2, 0);
926 rawReadBlock(blockIndex, 0, magic.ptr(), 2);
927 if (magic != ByteArray(FreeIndexMagic, 2))
928 throw DBException::format("Internal exception! block {} missing free index block marker!", blockIndex);
929
930 FreeIndexBlock freeIndexBlock;
931 DataStreamBuffer buffer(max(sizeof(BlockIndex), (size_t)4));
932
933 rawReadBlock(blockIndex, 2, buffer.ptr(), sizeof(BlockIndex));
934 buffer.seek(0);
935 freeIndexBlock.nextFreeBlock = buffer.read<BlockIndex>();
936
937 rawReadBlock(blockIndex, 2 + sizeof(BlockIndex), buffer.ptr(), 4);
938 buffer.seek(0);
939 size_t numFree = buffer.read<uint32_t>();
940
941 for (size_t i = 0; i < numFree; ++i) {
942 rawReadBlock(blockIndex, 6 + sizeof(BlockIndex) + sizeof(BlockIndex) * i, buffer.ptr(), sizeof(BlockIndex));
943 buffer.seek(0);
944 freeIndexBlock.freeBlocks.append(buffer.read<BlockIndex>());
945 }
946
947 return freeIndexBlock;
948}
949
950void BTreeDatabase::writeFreeIndexBlock(BlockIndex blockIndex, FreeIndexBlock indexBlock) {
951 checkBlockIndex(blockIndex);

Callers

nothing calls this directly

Calls 5

ByteArrayClass · 0.85
formatFunction · 0.70
ptrMethod · 0.45
seekMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected