From fa9f3fb5a3c8912a0a6880ffba9c72f4424ea044 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sun, 23 Jun 2013 21:55:52 +0900 Subject: Wrap Command object in std::unique_ptr --- src/DownloadEngine.cc | 42 +++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 23 deletions(-) (limited to 'src/DownloadEngine.cc') diff --git a/src/DownloadEngine.cc b/src/DownloadEngine.cc index 071d2340..bc315b24 100644 --- a/src/DownloadEngine.cc +++ b/src/DownloadEngine.cc @@ -40,6 +40,7 @@ #include #include #include +#include #include "StatCalc.h" #include "RequestGroup.h" @@ -107,40 +108,32 @@ DownloadEngine::DownloadEngine(const std::shared_ptr& eventPoll) sessionId_.assign(&sessionId[0], & sessionId[sizeof(sessionId)]); } -namespace { -void cleanQueue(std::deque& commands) { - std::for_each(commands.begin(), commands.end(), Deleter()); - commands.clear(); -} -} // namespace - -DownloadEngine::~DownloadEngine() { - cleanQueue(commands_); - cleanQueue(routineCommands_); +DownloadEngine::~DownloadEngine() +{ #ifdef HAVE_ARES_ADDR_NODE setAsyncDNSServers(0); #endif // HAVE_ARES_ADDR_NODE } namespace { -void executeCommand(std::deque& commands, +void executeCommand(std::deque>& commands, Command::STATUS statusFilter) { size_t max = commands.size(); for(size_t i = 0; i < max; ++i) { - Command* com = commands.front(); + std::unique_ptr com = std::move(commands.front()); commands.pop_front(); if(com->statusMatch(statusFilter)) { com->transitStatus(); if(com->execute()) { - delete com; - com = 0; + com.reset(); + } else { + com->clearIOEvents(); + com.release(); } } else { - commands.push_back(com); - } - if(com) { com->clearIOEvents(); + commands.push_back(std::move(com)); } } } @@ -282,9 +275,9 @@ void DownloadEngine::setNoWait(bool b) noWait_ = b; } -void DownloadEngine::addRoutineCommand(Command* command) +void DownloadEngine::addRoutineCommand(std::unique_ptr command) { - routineCommands_.push_back(command); + routineCommands_.push_back(std::move(command)); } void DownloadEngine::poolSocket(const std::string& key, @@ -561,14 +554,17 @@ void DownloadEngine::setRefreshInterval(int64_t interval) refreshInterval_ = std::min(static_cast(999), interval); } -void DownloadEngine::addCommand(const std::vector& commands) +void DownloadEngine::addCommand +(std::vector> commands) { - commands_.insert(commands_.end(), commands.begin(), commands.end()); + commands_.insert(commands_.end(), + std::make_move_iterator(std::begin(commands)), + std::make_move_iterator(std::end(commands))); } -void DownloadEngine::addCommand(Command* command) +void DownloadEngine::addCommand(std::unique_ptr command) { - commands_.push_back(command); + commands_.push_back(std::move(command)); } void DownloadEngine::setRequestGroupMan -- cgit