/* */ #include "RarestPieceSelector.h" #include #include #include "PieceStatMan.h" #include "bitfield.h" namespace aria2 { RarestPieceSelector::RarestPieceSelector (const std::shared_ptr& pieceStatMan):pieceStatMan_(pieceStatMan) {} bool RarestPieceSelector::select (size_t& index, const unsigned char* bitfield, size_t nbits) const { const std::vector& order = pieceStatMan_->getOrder(); const std::vector& counts = pieceStatMan_->getCounts(); int min = std::numeric_limits::max(); size_t bestIdx = nbits; for(size_t i = 0; i < nbits; ++i) { size_t idx = order[i]; if(bitfield::test(bitfield, nbits, idx) && counts[idx] < min) { min = counts[idx]; bestIdx = idx; } } if(bestIdx == nbits) { return false; } else { index = bestIdx; return true; } } } // namespace aria2