diff options
Diffstat (limited to 'src/DefaultBtRequestFactory.cc')
| -rw-r--r-- | src/DefaultBtRequestFactory.cc | 151 |
1 files changed, 76 insertions, 75 deletions
diff --git a/src/DefaultBtRequestFactory.cc b/src/DefaultBtRequestFactory.cc index beaac7de..29b12b99 100644 --- a/src/DefaultBtRequestFactory.cc +++ b/src/DefaultBtRequestFactory.cc @@ -53,38 +53,43 @@ namespace aria2 { DefaultBtRequestFactory::DefaultBtRequestFactory() - : pieceStorage_(nullptr), - dispatcher_(nullptr), - messageFactory_(nullptr), - cuid_(0) -{} + : pieceStorage_(nullptr), + dispatcher_(nullptr), + messageFactory_(nullptr), + cuid_(0) +{ +} DefaultBtRequestFactory::~DefaultBtRequestFactory() {} -void DefaultBtRequestFactory::addTargetPiece(const std::shared_ptr<Piece>& piece) +void DefaultBtRequestFactory::addTargetPiece( + const std::shared_ptr<Piece>& piece) { pieces_.push_back(piece); } namespace { -class AbortCompletedPieceRequest -{ +class AbortCompletedPieceRequest { private: BtMessageDispatcher* dispatcher_; + public: - AbortCompletedPieceRequest(BtMessageDispatcher* dispatcher): - dispatcher_(dispatcher) {} + AbortCompletedPieceRequest(BtMessageDispatcher* dispatcher) + : dispatcher_(dispatcher) + { + } void operator()(const std::shared_ptr<Piece>& piece) { - if(piece->pieceComplete()) { + if (piece->pieceComplete()) { dispatcher_->doAbortOutstandingRequestAction(piece); } } }; } // namespace -void DefaultBtRequestFactory::removeCompletedPiece() { +void DefaultBtRequestFactory::removeCompletedPiece() +{ std::for_each(pieces_.begin(), pieces_.end(), AbortCompletedPieceRequest(dispatcher_)); pieces_.erase(std::remove_if(pieces_.begin(), pieces_.end(), @@ -92,12 +97,12 @@ void DefaultBtRequestFactory::removeCompletedPiece() { pieces_.end()); } -void DefaultBtRequestFactory::removeTargetPiece -(const std::shared_ptr<Piece>& piece) +void DefaultBtRequestFactory::removeTargetPiece( + const std::shared_ptr<Piece>& piece) { - pieces_.erase(std::remove_if(pieces_.begin(), pieces_.end(), - derefEqual(piece)), - pieces_.end()); + pieces_.erase( + std::remove_if(pieces_.begin(), pieces_.end(), derefEqual(piece)), + pieces_.end()); dispatcher_->doAbortOutstandingRequestAction(piece); pieceStorage_->cancelPiece(piece, cuid_); } @@ -108,18 +113,17 @@ private: std::shared_ptr<Peer> peer_; PieceStorage* pieceStorage_; cuid_t cuid_; + public: - ProcessChokedPiece(std::shared_ptr<Peer> peer, - PieceStorage* pieceStorage, - cuid_t cuid): - peer_(std::move(peer)), - pieceStorage_(pieceStorage), - cuid_(cuid) - {} + ProcessChokedPiece(std::shared_ptr<Peer> peer, PieceStorage* pieceStorage, + cuid_t cuid) + : peer_(std::move(peer)), pieceStorage_(pieceStorage), cuid_(cuid) + { + } void operator()(const std::shared_ptr<Piece>& piece) { - if(!peer_->isInPeerAllowedIndexSet(piece->getIndex())) { + if (!peer_->isInPeerAllowedIndexSet(piece->getIndex())) { pieceStorage_->cancelPiece(piece, cuid_); } } @@ -130,8 +134,9 @@ namespace { class FindChokedPiece { private: std::shared_ptr<Peer> peer_; + public: - FindChokedPiece(std::shared_ptr<Peer> peer):peer_(std::move(peer)) {} + FindChokedPiece(std::shared_ptr<Peer> peer) : peer_(std::move(peer)) {} bool operator()(const std::shared_ptr<Piece>& piece) { @@ -144,13 +149,14 @@ void DefaultBtRequestFactory::doChokedAction() { std::for_each(pieces_.begin(), pieces_.end(), ProcessChokedPiece(peer_, pieceStorage_, cuid_)); - pieces_.erase(std::remove_if(pieces_.begin(), pieces_.end(), - FindChokedPiece(peer_)), - pieces_.end()); + pieces_.erase( + std::remove_if(pieces_.begin(), pieces_.end(), FindChokedPiece(peer_)), + pieces_.end()); } -void DefaultBtRequestFactory::removeAllTargetPiece() { - for(auto & elem : pieces_) { +void DefaultBtRequestFactory::removeAllTargetPiece() +{ + for (auto& elem : pieces_) { dispatcher_->doAbortOutstandingRequestAction(elem); pieceStorage_->cancelPiece(elem, cuid_); } @@ -160,26 +166,26 @@ void DefaultBtRequestFactory::removeAllTargetPiece() { std::vector<std::unique_ptr<BtRequestMessage>> DefaultBtRequestFactory::createRequestMessages(size_t max, bool endGame) { - if(endGame) { + if (endGame) { return createRequestMessagesOnEndGame(max); } auto requests = std::vector<std::unique_ptr<BtRequestMessage>>{}; - size_t getnum = max-requests.size(); + size_t getnum = max - requests.size(); auto blockIndexes = std::vector<size_t>{}; blockIndexes.reserve(getnum); - for(auto itr = std::begin(pieces_), eoi = std::end(pieces_); - itr != eoi && getnum; ++itr) { + for (auto itr = std::begin(pieces_), eoi = std::end(pieces_); + itr != eoi && getnum; ++itr) { auto& piece = *itr; - if(piece->getMissingUnusedBlockIndex(blockIndexes, getnum)) { + if (piece->getMissingUnusedBlockIndex(blockIndexes, getnum)) { getnum -= blockIndexes.size(); - for(auto i = std::begin(blockIndexes), eoi2 = std::end(blockIndexes); - i != eoi2; ++i) { - A2_LOG_DEBUG - (fmt("Creating RequestMessage index=%lu, begin=%u," - " blockIndex=%lu", - static_cast<unsigned long>(piece->getIndex()), - static_cast<unsigned int>((*i)*piece->getBlockLength()), - static_cast<unsigned long>(*i))); + for (auto i = std::begin(blockIndexes), eoi2 = std::end(blockIndexes); + i != eoi2; ++i) { + A2_LOG_DEBUG( + fmt("Creating RequestMessage index=%lu, begin=%u," + " blockIndex=%lu", + static_cast<unsigned long>(piece->getIndex()), + static_cast<unsigned int>((*i) * piece->getBlockLength()), + static_cast<unsigned long>(*i))); requests.push_back(messageFactory_->createRequestMessage(piece, *i)); } blockIndexes.clear(); @@ -192,8 +198,8 @@ std::vector<std::unique_ptr<BtRequestMessage>> DefaultBtRequestFactory::createRequestMessagesOnEndGame(size_t max) { auto requests = std::vector<std::unique_ptr<BtRequestMessage>>{}; - for(auto itr = std::begin(pieces_), eoi = std::end(pieces_); - itr != eoi && requests.size() < max; ++itr) { + for (auto itr = std::begin(pieces_), eoi = std::end(pieces_); + itr != eoi && requests.size() < max; ++itr) { auto& piece = *itr; const size_t mislen = piece->getBitfieldLength(); auto misbitfield = make_unique<unsigned char[]>(mislen); @@ -202,31 +208,30 @@ DefaultBtRequestFactory::createRequestMessagesOnEndGame(size_t max) auto missingBlockIndexes = std::vector<size_t>{}; size_t blockIndex = 0; - for(size_t i = 0; i < mislen; ++i) { + for (size_t i = 0; i < mislen; ++i) { unsigned char bits = misbitfield[i]; unsigned char mask = 128; - for(size_t bi = 0; bi < 8; ++bi, mask >>= 1, ++blockIndex) { - if(bits & mask) { + for (size_t bi = 0; bi < 8; ++bi, mask >>= 1, ++blockIndex) { + if (bits & mask) { missingBlockIndexes.push_back(blockIndex); } } } std::shuffle(std::begin(missingBlockIndexes), std::end(missingBlockIndexes), *SimpleRandomizer::getInstance()); - for(auto bitr = std::begin(missingBlockIndexes), - eoi2 = std::end(missingBlockIndexes); - bitr != eoi2 && requests.size() < max; ++bitr) { + for (auto bitr = std::begin(missingBlockIndexes), + eoi2 = std::end(missingBlockIndexes); + bitr != eoi2 && requests.size() < max; ++bitr) { size_t blockIndex = *bitr; - if(!dispatcher_->isOutstandingRequest(piece->getIndex(), - blockIndex)) { - A2_LOG_DEBUG - (fmt("Creating RequestMessage index=%lu, begin=%u," - " blockIndex=%lu", - static_cast<unsigned long>(piece->getIndex()), - static_cast<unsigned int>(blockIndex*piece->getBlockLength()), - static_cast<unsigned long>(blockIndex))); - requests.push_back(messageFactory_->createRequestMessage - (piece, blockIndex)); + if (!dispatcher_->isOutstandingRequest(piece->getIndex(), blockIndex)) { + A2_LOG_DEBUG( + fmt("Creating RequestMessage index=%lu, begin=%u," + " blockIndex=%lu", + static_cast<unsigned long>(piece->getIndex()), + static_cast<unsigned int>(blockIndex * piece->getBlockLength()), + static_cast<unsigned long>(blockIndex))); + requests.push_back( + messageFactory_->createRequestMessage(piece, blockIndex)); } } } @@ -234,17 +239,14 @@ DefaultBtRequestFactory::createRequestMessagesOnEndGame(size_t max) } namespace { -class CountMissingBlock -{ +class CountMissingBlock { private: size_t numMissingBlock_; + public: - CountMissingBlock():numMissingBlock_(0) {} + CountMissingBlock() : numMissingBlock_(0) {} - size_t getNumMissingBlock() - { - return numMissingBlock_; - } + size_t getNumMissingBlock() { return numMissingBlock_; } void operator()(const std::shared_ptr<Piece>& piece) { @@ -255,12 +257,11 @@ public: size_t DefaultBtRequestFactory::countMissingBlock() { - return std::for_each(pieces_.begin(), pieces_.end(), - CountMissingBlock()).getNumMissingBlock(); + return std::for_each(pieces_.begin(), pieces_.end(), CountMissingBlock()) + .getNumMissingBlock(); } -std::vector<size_t> -DefaultBtRequestFactory::getTargetPieceIndexes() const +std::vector<size_t> DefaultBtRequestFactory::getTargetPieceIndexes() const { auto res = std::vector<size_t>{}; res.reserve(pieces_.size()); @@ -279,8 +280,8 @@ void DefaultBtRequestFactory::setPeer(const std::shared_ptr<Peer>& peer) peer_ = peer; } -void DefaultBtRequestFactory::setBtMessageDispatcher -(BtMessageDispatcher* dispatcher) +void DefaultBtRequestFactory::setBtMessageDispatcher( + BtMessageDispatcher* dispatcher) { dispatcher_ = dispatcher; } |
