make some types movable (#885)

This commit is contained in:
Arvid Norberg 2016-07-04 18:19:55 -04:00 committed by GitHub
parent d9c091f888
commit cbb6f47f36
4 changed files with 35 additions and 16 deletions

View File

@ -117,21 +117,16 @@ namespace libtorrent
public: public:
// default constructor, does not refer to any session // default constructor, does not refer to any session
// implementation object. // implementation object.
session_proxy() {} session_proxy();
~session_proxy(); ~session_proxy();
#if __cplusplus >= 201103L session_proxy(session_proxy const&);
session_proxy(session_proxy const&) = default; session_proxy& operator=(session_proxy const&);
session_proxy& operator=(session_proxy const&) = default;
#endif
private: private:
session_proxy( session_proxy(
boost::shared_ptr<io_service> ios boost::shared_ptr<io_service> ios
, std::shared_ptr<std::thread> t , std::shared_ptr<std::thread> t
, boost::shared_ptr<aux::session_impl> impl) , boost::shared_ptr<aux::session_impl> impl);
: m_io_service(ios)
, m_thread(t)
, m_impl(impl)
{}
boost::shared_ptr<io_service> m_io_service; boost::shared_ptr<io_service> m_io_service;
std::shared_ptr<std::thread> m_thread; std::shared_ptr<std::thread> m_thread;
boost::shared_ptr<aux::session_impl> m_impl; boost::shared_ptr<aux::session_impl> m_impl;
@ -149,7 +144,7 @@ namespace libtorrent
// the settings to be set and pass it in to ``session::apply_settings()``. // the settings to be set and pass it in to ``session::apply_settings()``.
// //
// see apply_settings(). // see apply_settings().
class TORRENT_EXPORT session: public boost::noncopyable, public session_handle class TORRENT_EXPORT session : public session_handle
{ {
public: public:
@ -172,6 +167,14 @@ namespace libtorrent
start(flags, pack, nullptr); start(flags, pack, nullptr);
} }
// moveable
session(session&&) = default;
session& operator=(session&&) = default;
// noncopyable
session(session const&) = delete;
session& operator=(session const&) = delete;
// overload of the constructor that takes an external io_service to run // overload of the constructor that takes an external io_service to run
// the session object on. This is primarily useful for tests that may want // the session object on. This is primarily useful for tests that may want
// to run multiple sessions on a single io_service, or low resource // to run multiple sessions on a single io_service, or low resource

View File

@ -69,6 +69,14 @@ namespace libtorrent
: m_impl(impl) : m_impl(impl)
{} {}
// moveable
session_handle(session_handle&&) = default;
session_handle& operator=(session_handle&&) = default;
// non copyable
session_handle(session_handle const&) = delete;
session_handle& operator=(session_handle const&) = delete;
bool is_valid() const { return m_impl != nullptr; } bool is_valid() const { return m_impl != nullptr; }
// TODO: 2 the ip filter should probably be saved here too // TODO: 2 the ip filter should probably be saved here too

View File

@ -248,12 +248,10 @@ namespace libtorrent
// i.e. is_valid() will return false. // i.e. is_valid() will return false.
torrent_handle() {} torrent_handle() {}
torrent_handle(torrent_handle const& t) torrent_handle(torrent_handle const& t) = default;
{ if (!t.m_torrent.expired()) m_torrent = t.m_torrent; } torrent_handle(torrent_handle&& t) = default;
#if __cplusplus >= 201103L
torrent_handle& operator=(torrent_handle const&) = default; torrent_handle& operator=(torrent_handle const&) = default;
#endif torrent_handle& operator=(torrent_handle&&) = default;
// flags for add_piece(). // flags for add_piece().
enum flags_t { overwrite_existing = 1 }; enum flags_t { overwrite_existing = 1 };

View File

@ -398,6 +398,16 @@ namespace libtorrent
session_settings::~session_settings() {} session_settings::~session_settings() {}
#endif // TORRENT_NO_DEPRECATE #endif // TORRENT_NO_DEPRECATE
session_proxy::session_proxy() = default;
session_proxy::session_proxy(boost::shared_ptr<io_service> ios
, std::shared_ptr<std::thread> t
, boost::shared_ptr<aux::session_impl> impl)
: m_io_service(ios)
, m_thread(t)
, m_impl(impl)
{}
session_proxy::session_proxy(session_proxy const&) = default;
session_proxy& session_proxy::operator=(session_proxy const&) = default;
session_proxy::~session_proxy() session_proxy::~session_proxy()
{ {
if (m_thread && m_thread.unique()) if (m_thread && m_thread.unique())