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

Method loadIndex

source/core/StarBTreeDatabase.cpp:520–548  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

518}
519
520auto BTreeDatabase::BTreeImpl::loadIndex(Pointer pointer) -> Index {
521 SpinLocker lock(parent->m_indexCacheSpinLock);
522 if (auto index = parent->m_indexCache.ptr(pointer))
523 return *index;
524 lock.unlock();
525
526 auto index = make_shared<IndexNode>();
527
528 DataStreamBuffer buffer(parent->readBlock(pointer));
529
530 if (buffer.readBytes(2) != ByteArray(IndexMagic, 2))
531 throw DBException("Error, incorrect index block signature.");
532
533 index->self = pointer;
534
535 index->level = buffer.read<uint8_t>();
536 uint32_t s = buffer.read<uint32_t>();
537 index->beginPointer = buffer.read<BlockIndex>();
538 index->pointers.resize(s);
539 for (uint32_t i = 0; i < s; ++i) {
540 auto& e = index->pointers[i];
541 e.key = buffer.readBytes(parent->m_keySize);
542 e.pointer = buffer.read<BlockIndex>();
543 }
544
545 lock.lock();
546 parent->m_indexCache.set(pointer, index);
547 return index;
548}
549
550bool BTreeDatabase::BTreeImpl::indexNeedsShift(Index const& index) {
551 return index->pointerCount() < (parent->maxIndexPointers() + 1) / 2;

Callers 2

tryFlattenMethod · 0.45
flattenVisitorMethod · 0.45

Calls 8

ByteArrayClass · 0.85
readBlockMethod · 0.80
ptrMethod · 0.45
unlockMethod · 0.45
readBytesMethod · 0.45
resizeMethod · 0.45
lockMethod · 0.45
setMethod · 0.45

Tested by

no test coverage detected