summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-07-04 01:38:24 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-07-04 01:38:24 +0900
commit128783cf8636bb713f29e472b11444c2b9287d8d (patch)
tree7356dbf0cf390d8f2e99cad8bc968c7db17eca5a /src
parenta479473949a8b82b1943c7d57966acfbb58f6c81 (diff)
Use std::unique_ptr for PieceSelector instead of std::shared_ptr
Diffstat (limited to 'src')
-rw-r--r--src/DefaultPieceStorage.cc13
-rw-r--r--src/DefaultPieceStorage.h11
-rw-r--r--src/RequestGroup.cc14
3 files changed, 23 insertions, 15 deletions
diff --git a/src/DefaultPieceStorage.cc b/src/DefaultPieceStorage.cc
index 9fc33367..8a236e59 100644
--- a/src/DefaultPieceStorage.cc
+++ b/src/DefaultPieceStorage.cc
@@ -83,7 +83,7 @@ DefaultPieceStorage::DefaultPieceStorage
endGamePieceNum_(END_GAME_PIECE_NUM),
option_(option),
pieceStatMan_(new PieceStatMan(downloadContext->getNumPieces(), true)),
- pieceSelector_(new RarestPieceSelector(pieceStatMan_)),
+ pieceSelector_(make_unique<RarestPieceSelector>(pieceStatMan_)),
wrDiskCache_(0)
{
const std::string& pieceSelectorOpt =
@@ -866,4 +866,15 @@ void DefaultPieceStorage::onDownloadIncomplete()
streamPieceSelector_->onBitfieldInit();
}
+void DefaultPieceStorage::setPieceSelector
+(std::unique_ptr<PieceSelector> pieceSelector)
+{
+ pieceSelector_ = std::move(pieceSelector);
+}
+
+std::unique_ptr<PieceSelector> DefaultPieceStorage::popPieceSelector()
+{
+ return std::move(pieceSelector_);
+}
+
} // namespace aria2
diff --git a/src/DefaultPieceStorage.h b/src/DefaultPieceStorage.h
index b0d6e316..d6094d2e 100644
--- a/src/DefaultPieceStorage.h
+++ b/src/DefaultPieceStorage.h
@@ -90,7 +90,7 @@ private:
std::shared_ptr<PieceStatMan> pieceStatMan_;
- std::shared_ptr<PieceSelector> pieceSelector_;
+ std::unique_ptr<PieceSelector> pieceSelector_;
std::shared_ptr<StreamPieceSelector> streamPieceSelector_;
WrDiskCache* wrDiskCache_;
@@ -301,16 +301,15 @@ public:
return pieceStatMan_;
}
- void setPieceSelector(const std::shared_ptr<PieceSelector>& pieceSelector)
- {
- pieceSelector_ = pieceSelector;
- }
+ void setPieceSelector(std::unique_ptr<PieceSelector> pieceSelector);
- const std::shared_ptr<PieceSelector>& getPieceSelector() const
+ const std::unique_ptr<PieceSelector>& getPieceSelector() const
{
return pieceSelector_;
}
+ std::unique_ptr<PieceSelector> popPieceSelector();
+
void setWrDiskCache(WrDiskCache* wrDiskCache)
{
wrDiskCache_ = wrDiskCache;
diff --git a/src/RequestGroup.cc b/src/RequestGroup.cc
index 6efe900b..c4f16233 100644
--- a/src/RequestGroup.cc
+++ b/src/RequestGroup.cc
@@ -596,9 +596,7 @@ void RequestGroup::initPieceStorage()
// integrated downloads. Currently multi-file integrated
// download is not supported.
A2_LOG_DEBUG("Using LongestSequencePieceSelector");
- std::shared_ptr<PieceSelector> longestPieceSelector
- (new LongestSequencePieceSelector());
- ps->setPieceSelector(longestPieceSelector);
+ ps->setPieceSelector(make_unique<LongestSequencePieceSelector>());
}
if(option_->defined(PREF_BT_PRIORITIZE_PIECE)) {
std::vector<size_t> result;
@@ -607,12 +605,12 @@ void RequestGroup::initPieceStorage()
downloadContext_->getFileEntries(),
downloadContext_->getPieceLength());
if(!result.empty()) {
- std::random_shuffle(result.begin(), result.end(),
+ std::random_shuffle(std::begin(result), std::end(result),
*SimpleRandomizer::getInstance());
- std::shared_ptr<PriorityPieceSelector> priSelector
- (new PriorityPieceSelector(ps->getPieceSelector()));
- priSelector->setPriorityPiece(result.begin(), result.end());
- ps->setPieceSelector(priSelector);
+ auto priSelector = make_unique<PriorityPieceSelector>
+ (ps->popPieceSelector());
+ priSelector->setPriorityPiece(std::begin(result), std::end(result));
+ ps->setPieceSelector(std::move(priSelector));
}
}
}