diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-07-06 19:39:16 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-07-06 19:39:16 +0900 |
| commit | 00e27e4fa47477109fc467d96241a0fabd3c4ad2 (patch) | |
| tree | 8a89546863e3071329a897364bd09ee1473e8650 /src/DownloadEngineFactory.cc | |
| parent | f83b0fcfa38cf80b15b275d48c131fa691d3006b (diff) | |
DownloadEngine: Use std::unique_ptr for eventPoll_
Diffstat (limited to 'src/DownloadEngineFactory.cc')
| -rw-r--r-- | src/DownloadEngineFactory.cc | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/src/DownloadEngineFactory.cc b/src/DownloadEngineFactory.cc index 49e9a4bf..0edb3ccc 100644 --- a/src/DownloadEngineFactory.cc +++ b/src/DownloadEngineFactory.cc @@ -84,30 +84,27 @@ namespace aria2 { DownloadEngineFactory::DownloadEngineFactory() {} -std::shared_ptr<DownloadEngine> -DownloadEngineFactory::newDownloadEngine -(Option* op, std::vector<std::shared_ptr<RequestGroup> > requestGroups) +namespace { +std::unique_ptr<EventPoll> createEventPoll(Option* op) { - const size_t MAX_CONCURRENT_DOWNLOADS = - op->getAsInt(PREF_MAX_CONCURRENT_DOWNLOADS); - std::shared_ptr<EventPoll> eventPoll; const std::string& pollMethod = op->get(PREF_EVENT_POLL); #ifdef HAVE_LIBUV if (pollMethod == V_LIBUV) { - std::shared_ptr<LibuvEventPoll> ep(new LibuvEventPoll()); - if (!ep->good()) { + auto ep = make_unique<LibuvEventPoll>(); + if(ep->good()) { + return std::move(ep); + } else { throw DL_ABORT_EX("Initializing LibuvEventPoll failed." " Try --event-poll=select"); } - eventPoll = ep; } else #endif // HAVE_LIBUV #ifdef HAVE_EPOLL if(pollMethod == V_EPOLL) { - std::shared_ptr<EpollEventPoll> ep(new EpollEventPoll()); + auto ep = make_unique<EpollEventPoll>(); if(ep->good()) { - eventPoll = ep; + return std::move(ep); } else { throw DL_ABORT_EX("Initializing EpollEventPoll failed." " Try --event-poll=select"); @@ -116,9 +113,9 @@ DownloadEngineFactory::newDownloadEngine #endif // HAVE_EPLL #ifdef HAVE_KQUEUE if(pollMethod == V_KQUEUE) { - std::shared_ptr<KqueueEventPoll> kp(new KqueueEventPoll()); + auto kp = make_unique<KqueueEventPoll>(); if(kp->good()) { - eventPoll = kp; + return std::move(kp); } else { throw DL_ABORT_EX("Initializing KqueueEventPoll failed." " Try --event-poll=select"); @@ -127,9 +124,9 @@ DownloadEngineFactory::newDownloadEngine #endif // HAVE_KQUEUE #ifdef HAVE_PORT_ASSOCIATE if(pollMethod == V_PORT) { - std::shared_ptr<PortEventPoll> pp(new PortEventPoll()); + auto pp = make_unique<PortEventPoll>(); if(pp->good()) { - eventPoll = pp; + return std::move(pp); } else { throw DL_ABORT_EX("Initializing PortEventPoll failed." " Try --event-poll=select"); @@ -138,15 +135,24 @@ DownloadEngineFactory::newDownloadEngine #endif // HAVE_PORT_ASSOCIATE #ifdef HAVE_POLL if(pollMethod == V_POLL) { - eventPoll.reset(new PollEventPoll()); + return make_unique<PollEventPoll>(); } else #endif // HAVE_POLL if(pollMethod == V_SELECT) { - eventPoll.reset(new SelectEventPoll()); + return make_unique<SelectEventPoll>(); } else { - abort(); + assert(0); } - std::shared_ptr<DownloadEngine> e(new DownloadEngine(eventPoll)); +} +} // namespace + +std::shared_ptr<DownloadEngine> +DownloadEngineFactory::newDownloadEngine +(Option* op, std::vector<std::shared_ptr<RequestGroup> > requestGroups) +{ + const size_t MAX_CONCURRENT_DOWNLOADS = + op->getAsInt(PREF_MAX_CONCURRENT_DOWNLOADS); + auto e = std::make_shared<DownloadEngine>(createEventPoll(op)); e->setOption(op); { auto requestGroupMan = make_unique<RequestGroupMan> |
