forked from premiere/premiere-libtorrent
add rvalue reference overloads for add_torrent_params, settings_pack and session_params. Those structures are pretty large so being able to take them by rvalue reference may be beneficial
This commit is contained in:
parent
f425a3818a
commit
4d88c83576
|
@ -979,8 +979,8 @@ void bind_session()
|
|||
#endif // TORRENT_DISABLE_DHT
|
||||
.def("add_torrent", &add_torrent)
|
||||
.def("async_add_torrent", &async_add_torrent)
|
||||
.def("async_add_torrent", <::session::async_add_torrent)
|
||||
.def("add_torrent", allow_threads((lt::torrent_handle (session_handle::*)(add_torrent_params const&))<::session::add_torrent))
|
||||
.def("async_add_torrent", static_cast<void (session_handle::*)(lt::add_torrent_params const&)>(<::session::async_add_torrent))
|
||||
.def("add_torrent", allow_threads(static_cast<lt::torrent_handle (session_handle::*)(add_torrent_params const&)>(<::session::add_torrent)))
|
||||
#ifndef BOOST_NO_EXCEPTIONS
|
||||
#if TORRENT_ABI_VERSION == 1
|
||||
.def(
|
||||
|
|
|
@ -395,7 +395,11 @@ namespace aux {
|
|||
void add_dht_router(std::pair<std::string, int> const& node);
|
||||
void set_dht_settings(dht::dht_settings const& s);
|
||||
dht::dht_settings const& get_dht_settings() const { return m_dht_settings; }
|
||||
void set_dht_state(dht::dht_state state);
|
||||
|
||||
// you must give up ownership of the dht state
|
||||
void set_dht_state(dht::dht_state&& state);
|
||||
void set_dht_state(dht::dht_state const& state) = delete;
|
||||
|
||||
void set_dht_storage(dht::dht_storage_constructor_type sc);
|
||||
void start_dht();
|
||||
void stop_dht();
|
||||
|
|
|
@ -72,7 +72,16 @@ namespace libtorrent { namespace dht {
|
|||
, dht_settings const& settings
|
||||
, counters& cnt
|
||||
, dht_storage_interface& storage
|
||||
, dht_state state);
|
||||
, dht_state&& state);
|
||||
|
||||
// the dht_state must be moved in!
|
||||
dht_tracker(dht_observer* observer
|
||||
, io_service& ios
|
||||
, send_fun_t const& send_fun
|
||||
, dht_settings const& settings
|
||||
, counters& cnt
|
||||
, dht_storage_interface& storage
|
||||
, dht_state const& state) = delete;
|
||||
|
||||
#if defined(_MSC_VER) && _MSC_VER < 1910
|
||||
// workaround for a bug in msvc 14.0
|
||||
|
|
|
@ -131,10 +131,15 @@ namespace aux {
|
|||
// (ut_metadata, ut_pex and smart_ban). The default values in the
|
||||
// settings is to start the default features like upnp, NAT-PMP,
|
||||
// and dht for example.
|
||||
explicit session_params(settings_pack sp = settings_pack());
|
||||
explicit session_params(settings_pack&& sp);
|
||||
explicit session_params(settings_pack const& sp);
|
||||
session_params();
|
||||
|
||||
// This constructor helps to configure the set of initial plugins
|
||||
// to be added to the session before it's started.
|
||||
session_params(settings_pack sp
|
||||
session_params(settings_pack&& sp
|
||||
, std::vector<std::shared_ptr<plugin>> exts);
|
||||
session_params(settings_pack const& sp
|
||||
, std::vector<std::shared_ptr<plugin>> exts);
|
||||
|
||||
session_params(session_params const&) = default;
|
||||
|
@ -178,8 +183,13 @@ namespace aux {
|
|||
// In order to avoid a race condition between starting the session and
|
||||
// configuring it, you can pass in a session_params object. Its settings
|
||||
// will take effect before the session starts up.
|
||||
explicit session(session_params params = session_params())
|
||||
explicit session(session_params const& params)
|
||||
{ start(session_params(params), nullptr); }
|
||||
explicit session(session_params&& params)
|
||||
{ start(std::move(params), nullptr); }
|
||||
session()
|
||||
{
|
||||
session_params params;
|
||||
start(std::move(params), nullptr);
|
||||
}
|
||||
|
||||
|
@ -196,10 +206,10 @@ namespace aux {
|
|||
// call session::abort() and save the session_proxy first, then
|
||||
// destruct the session object, then sync with the io_service, then
|
||||
// destruct the session_proxy object.
|
||||
session(session_params params, io_service& ios)
|
||||
{
|
||||
start(std::move(params), &ios);
|
||||
}
|
||||
session(session_params&& params, io_service& ios)
|
||||
{ start(std::move(params), &ios); }
|
||||
session(session_params const& params, io_service& ios)
|
||||
{ start(session_params(params), &ios); }
|
||||
|
||||
// Constructs the session objects which acts as the container of torrents.
|
||||
// It provides configuration options across torrents (such as rate limits,
|
||||
|
@ -212,11 +222,12 @@ namespace aux {
|
|||
// NAT-PMP) and default plugins (ut_metadata, ut_pex and smart_ban). The
|
||||
// default is to start those features. If you do not want them to start,
|
||||
// pass 0 as the flags parameter.
|
||||
session(settings_pack pack
|
||||
session(settings_pack&& pack
|
||||
, session_flags_t const flags = start_default_features | add_default_plugins)
|
||||
{
|
||||
start(flags, std::move(pack), nullptr);
|
||||
}
|
||||
{ start(flags, std::move(pack), nullptr); }
|
||||
session(settings_pack const& pack
|
||||
, session_flags_t const flags = start_default_features | add_default_plugins)
|
||||
{ start(flags, settings_pack(pack), nullptr); }
|
||||
|
||||
// movable
|
||||
session(session&&) = default;
|
||||
|
@ -239,12 +250,14 @@ namespace aux {
|
|||
// call session::abort() and save the session_proxy first, then
|
||||
// destruct the session object, then sync with the io_service, then
|
||||
// destruct the session_proxy object.
|
||||
session(settings_pack pack
|
||||
session(settings_pack&& pack
|
||||
, io_service& ios
|
||||
, session_flags_t const flags = start_default_features | add_default_plugins)
|
||||
{
|
||||
start(flags, std::move(pack), &ios);
|
||||
}
|
||||
{ start(flags, std::move(pack), &ios); }
|
||||
session(settings_pack const& pack
|
||||
, io_service& ios
|
||||
, session_flags_t const flags = start_default_features | add_default_plugins)
|
||||
{ start(flags, settings_pack(pack), &ios); }
|
||||
|
||||
#if TORRENT_ABI_VERSION == 1
|
||||
#ifdef __GNUC__
|
||||
|
@ -348,8 +361,11 @@ namespace aux {
|
|||
|
||||
private:
|
||||
|
||||
void start(session_params params, io_service* ios);
|
||||
void start(session_flags_t flags, settings_pack sp, io_service* ios);
|
||||
void start(session_params&& params, io_service* ios);
|
||||
void start(session_flags_t flags, settings_pack&& sp, io_service* ios);
|
||||
|
||||
void start(session_params const& params, io_service* ios) = delete;
|
||||
void start(session_flags_t flags, settings_pack const& sp, io_service* ios) = delete;
|
||||
|
||||
// data shared between the main thread
|
||||
// and the working thread
|
||||
|
|
|
@ -215,7 +215,8 @@ namespace libtorrent {
|
|||
torrent_handle add_torrent(add_torrent_params const& params);
|
||||
#endif
|
||||
torrent_handle add_torrent(add_torrent_params const& params, error_code& ec);
|
||||
void async_add_torrent(add_torrent_params params);
|
||||
void async_add_torrent(add_torrent_params&& params);
|
||||
void async_add_torrent(add_torrent_params const& params);
|
||||
|
||||
#ifndef BOOST_NO_EXCEPTIONS
|
||||
#if TORRENT_ABI_VERSION == 1
|
||||
|
|
|
@ -124,7 +124,7 @@ TORRENT_TEST(dht_rate_limit)
|
|||
std::unique_ptr<lt::dht::dht_storage_interface> dht_storage(dht::dht_default_storage_constructor(dhtsett));
|
||||
auto dht = std::make_shared<lt::dht::dht_tracker>(
|
||||
&o, dht_ios, std::bind(&send_packet, std::ref(sock), _1, _2, _3, _4, _5)
|
||||
, dhtsett, cnt, *dht_storage, state);
|
||||
, dhtsett, cnt, *dht_storage, std::move(state));
|
||||
dht->new_socket(ls);
|
||||
|
||||
bool stop = false;
|
||||
|
@ -245,7 +245,7 @@ TORRENT_TEST(dht_delete_socket)
|
|||
std::unique_ptr<lt::dht::dht_storage_interface> dht_storage(dht::dht_default_storage_constructor(dhtsett));
|
||||
auto dht = std::make_shared<lt::dht::dht_tracker>(
|
||||
&o, dht_ios, std::bind(&send_packet, std::ref(sock), _1, _2, _3, _4, _5)
|
||||
, dhtsett, cnt, *dht_storage, state);
|
||||
, dhtsett, cnt, *dht_storage, std::move(state));
|
||||
|
||||
dht->start([](std::vector<std::pair<dht::node_entry, std::string>> const&){});
|
||||
dht->new_socket(ls);
|
||||
|
|
|
@ -88,7 +88,7 @@ namespace libtorrent { namespace dht {
|
|||
, dht_settings const& settings
|
||||
, counters& cnt
|
||||
, dht_storage_interface& storage
|
||||
, dht_state state)
|
||||
, dht_state&& state)
|
||||
: m_counters(cnt)
|
||||
, m_storage(storage)
|
||||
, m_state(std::move(state))
|
||||
|
|
|
@ -319,7 +319,7 @@ namespace {
|
|||
return params;
|
||||
}
|
||||
|
||||
void session::start(session_params params, io_service* ios)
|
||||
void session::start(session_params&& params, io_service* ios)
|
||||
{
|
||||
bool const internal_executor = ios == nullptr;
|
||||
|
||||
|
@ -334,16 +334,18 @@ namespace {
|
|||
*static_cast<session_handle*>(this) = session_handle(m_impl);
|
||||
|
||||
#ifndef TORRENT_DISABLE_EXTENSIONS
|
||||
for (auto const& ext : params.extensions)
|
||||
for (auto& ext : params.extensions)
|
||||
{
|
||||
m_impl->add_ses_extension(ext);
|
||||
m_impl->add_ses_extension(std::move(ext));
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef TORRENT_DISABLE_DHT
|
||||
m_impl->set_dht_settings(params.dht_settings);
|
||||
m_impl->set_dht_settings(std::move(params.dht_settings));
|
||||
m_impl->set_dht_state(std::move(params.dht_state));
|
||||
m_impl->set_dht_storage(params.dht_storage_constructor);
|
||||
|
||||
TORRENT_ASSERT(params.dht_storage_constructor);
|
||||
m_impl->set_dht_storage(std::move(params.dht_storage_constructor));
|
||||
#endif
|
||||
|
||||
m_impl->start_session();
|
||||
|
@ -376,7 +378,7 @@ namespace {
|
|||
}
|
||||
}
|
||||
|
||||
void session::start(session_flags_t const flags, settings_pack sp, io_service* ios)
|
||||
void session::start(session_flags_t const flags, settings_pack&& sp, io_service* ios)
|
||||
{
|
||||
start({std::move(sp),
|
||||
default_plugins(!(flags & add_default_plugins))}, ios);
|
||||
|
@ -431,16 +433,36 @@ namespace {
|
|||
}
|
||||
}
|
||||
|
||||
session_params::session_params(settings_pack sp)
|
||||
session_params::session_params(settings_pack&& sp)
|
||||
: session_params(std::move(sp), default_plugins())
|
||||
{}
|
||||
|
||||
session_params::session_params(settings_pack sp
|
||||
session_params::session_params(settings_pack const& sp)
|
||||
: session_params(sp, default_plugins())
|
||||
{}
|
||||
|
||||
session_params::session_params()
|
||||
: extensions(default_plugins())
|
||||
#ifndef TORRENT_DISABLE_DHT
|
||||
, dht_storage_constructor(dht::dht_default_storage_constructor)
|
||||
#endif
|
||||
{}
|
||||
|
||||
session_params::session_params(settings_pack&& sp
|
||||
, std::vector<std::shared_ptr<plugin>> exts)
|
||||
: settings(std::move(sp))
|
||||
, extensions(std::move(exts))
|
||||
#ifndef TORRENT_DISABLE_DHT
|
||||
, dht_storage_constructor(dht::dht_default_storage_constructor)
|
||||
#endif
|
||||
{}
|
||||
|
||||
session_params::session_params(settings_pack const& sp
|
||||
, std::vector<std::shared_ptr<plugin>> exts)
|
||||
: settings(sp)
|
||||
, extensions(std::move(exts))
|
||||
#ifndef TORRENT_DISABLE_DHT
|
||||
, dht_storage_constructor(dht::dht_default_storage_constructor)
|
||||
#endif
|
||||
{}
|
||||
}
|
||||
|
|
|
@ -393,7 +393,12 @@ namespace {
|
|||
return sync_call_ret<torrent_handle>(&session_impl::add_torrent, p, ecr);
|
||||
}
|
||||
|
||||
void session_handle::async_add_torrent(add_torrent_params params)
|
||||
void session_handle::async_add_torrent(add_torrent_params const& params)
|
||||
{
|
||||
async_add_torrent(add_torrent_params(params));
|
||||
}
|
||||
|
||||
void session_handle::async_add_torrent(add_torrent_params&& params)
|
||||
{
|
||||
TORRENT_ASSERT_PRECOND(!params.save_path.empty());
|
||||
|
||||
|
|
|
@ -5860,7 +5860,7 @@ namespace aux {
|
|||
m_dht_settings = settings;
|
||||
}
|
||||
|
||||
void session_impl::set_dht_state(dht::dht_state state)
|
||||
void session_impl::set_dht_state(dht::dht_state&& state)
|
||||
{
|
||||
m_dht_state = std::move(state);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue