/* */ #ifndef _D_PIECE_STAT_MAN_H_ #define _D_PIECE_STAT_MAN_H_ #include "common.h" #include #include "SharedHandle.h" 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 { if(count_ == pieceStat.count_) { return order_ < pieceStat.order_; } else { return count_ < pieceStat.count_; } } void addCount(); void subCount(); size_t getOrder() const { return order_; } void setOrder(size_t order) { order_ = order; } size_t getIndex() const { return index_; } size_t getCount() const { return count_; } }; class PieceStatMan { private: std::vector > pieceStats_; std::vector sortedPieceStatIndexes_; public: PieceStatMan(size_t pieceNum, bool randomShuffle); 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); // Returns piece index in rarest first order. const std::vector& getRarerPieceIndexes() const { return sortedPieceStatIndexes_; } const std::vector >& getPieceStats() const { return pieceStats_; } }; } // namespace aria2 #endif // _D_PIECE_STAT_MAN_H_