/* */ #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