/* */ #include "RandomStreamPieceSelector.h" #include "BitfieldMan.h" #include "SimpleRandomizer.h" namespace aria2 { RandomStreamPieceSelector::RandomStreamPieceSelector (BitfieldMan* bitfieldMan) : bitfieldMan_(bitfieldMan) {} RandomStreamPieceSelector::~RandomStreamPieceSelector() {} bool RandomStreamPieceSelector::select (size_t& index, size_t minSplitSize, const unsigned char* ignoreBitfield, size_t length) { size_t start = SimpleRandomizer::getInstance()->getRandomNumber (bitfieldMan_->countBlock()); auto rv = bitfieldMan_->getInorderMissingUnusedIndex (index, start, bitfieldMan_->countBlock(), minSplitSize, ignoreBitfield, length); if (rv) { return true; } rv = bitfieldMan_->getInorderMissingUnusedIndex(index, 0, start, minSplitSize, ignoreBitfield, length); if (rv) { return true; } // Fall back to inorder search because randomized search may fail // because of |minSplitSize| constraint. return bitfieldMan_->getInorderMissingUnusedIndex(index, minSplitSize, ignoreBitfield, length); } void RandomStreamPieceSelector::onBitfieldInit() {} } // namespace aria2