diff options
Diffstat (limited to 'src/DefaultPieceStorage.cc')
| -rw-r--r-- | src/DefaultPieceStorage.cc | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/DefaultPieceStorage.cc b/src/DefaultPieceStorage.cc index f1f13f2f..929359d3 100644 --- a/src/DefaultPieceStorage.cc +++ b/src/DefaultPieceStorage.cc @@ -537,14 +537,29 @@ int64_t DefaultPieceStorage::getCompletedLength() int64_t DefaultPieceStorage::getFilteredCompletedLength() { return bitfieldMan_->getFilteredCompletedLength()+ - getInFlightPieceCompletedLength(); + getInFlightPieceFilteredCompletedLength(); } -size_t DefaultPieceStorage::getInFlightPieceCompletedLength() const +int64_t DefaultPieceStorage::getInFlightPieceCompletedLength() const { - return std::accumulate(usedPieces_.begin(), usedPieces_.end(), - 0, adopt2nd(std::plus<size_t>(), - mem_fun_sh(&Piece::getCompletedLength))); + int64_t len = 0; + for(UsedPieceSet::const_iterator i = usedPieces_.begin(), + eoi = usedPieces_.end(); i != eoi; ++i) { + len += (*i)->getCompletedLength(); + } + return len; +} + +int64_t DefaultPieceStorage::getInFlightPieceFilteredCompletedLength() const +{ + int64_t len = 0; + for(UsedPieceSet::const_iterator i = usedPieces_.begin(), + eoi = usedPieces_.end(); i != eoi; ++i) { + if(bitfieldMan_->isFilterBitSet((*i)->getIndex())) { + len += (*i)->getCompletedLength(); + } + } + return len; } // not unittested |
