/* */ #ifndef _D_SHARE_RATIO_SEED_CRITERIA_H_ #define _D_SHARE_RATIO_SEED_CRITERIA_H_ #include "SeedCriteria.h" #include "DownloadContext.h" #include "PeerStorage.h" #include "PieceStorage.h" namespace aria2 { class ShareRatioSeedCriteria : public SeedCriteria { private: double ratio; SharedHandle downloadContext_; SharedHandle peerStorage_; SharedHandle pieceStorage_; public: ShareRatioSeedCriteria (double ratio, const SharedHandle& downloadContext) :ratio(ratio), downloadContext_(downloadContext) {} virtual ~ShareRatioSeedCriteria() {} virtual void reset() {} virtual bool evaluate() { if(downloadContext_->getTotalLength() == 0) { return false; } TransferStat stat = peerStorage_->calculateStat(); return ratio <= (double)stat.getAllTimeUploadLength()/ pieceStorage_->getCompletedLength(); } void setRatio(double ratio) { this->ratio = ratio; } double getRatio() const { return ratio; } void setPeerStorage(const SharedHandle& peerStorage) { peerStorage_ = peerStorage; } void setPieceStorage(const SharedHandle& pieceStorage) { pieceStorage_ = pieceStorage; } }; } // namespace aria2 #endif // _D_SHARE_RATIO_SEED_CRITERIA_H_