/* */ #ifndef _D_RAREST_PIECE_SELECTOR_H_ #define _D_RAREST_PIECE_SELECTOR_H_ #include "PieceSelector.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:public PieceSelector { private: std::vector > _pieceStats; std::vector > _sortedPieceStats; public: RarestPieceSelector(size_t pieceNum, bool randomShuffle); virtual bool select (size_t& index, const std::deque& candidateIndexes) const; virtual void addPieceStats(size_t index); virtual void addPieceStats(const unsigned char* bitfield, size_t bitfieldLength); virtual void subtractPieceStats(const unsigned char* bitfield, size_t bitfieldLength); virtual void updatePieceStats(const unsigned char* newBitfield, size_t newBitfieldLength, const unsigned char* oldBitfield); const std::vector >& getSortedPieceStats() const; }; } // namespace aria2 #endif // _D_RAREST_PIECE_SELECTOR_H_