/* */ #ifndef _D_RAREST_PIECE_SELECTOR_H_ #define _D_RAREST_PIECE_SELECTOR_H_ #include "common.h" #include "SharedHandle.h" #include namespace aria2 { class PieceStat { private: size_t _order; size_t _index; size_t _count; public: PieceStat(size_t index); bool operator<(const PieceStat& pieceStat) const; void addCount(); void subCount(); size_t getOrder() const; void setOrder(size_t order); size_t getIndex() const; size_t getCount() const; }; class RarestPieceSelector { private: std::deque > _pieceStats; std::deque > _sortedPieceStats; public: RarestPieceSelector(size_t pieceNum, bool randomShuffle); bool select(size_t& index, const std::deque& candidateIndexes) const; void addPieceStats(size_t index); void addPieceStats(const unsigned char* bitfield, size_t bitfieldLength); void subtractPieceStats(const unsigned char* bitfield, size_t bitfieldLength); void updatePieceStats(const unsigned char* newBitfield, size_t newBitfieldLength, const unsigned char* oldBitfield); const std::deque >& getSortedPieceStats() const; }; } // namespace aria2 #endif // _D_RAREST_PIECE_SELECTOR_H_