diff --git a/src/command_download.cc b/src/command_download.cc index d09b472c..1a01154e 100644 --- a/src/command_download.cc +++ b/src/command_download.cc @@ -593,8 +593,7 @@ d_list_push_back_unique(core::Download* download, const torrent::Object& rawArgs const torrent::Object& args = (rawArgs.is_list() && !rawArgs.as_list().empty()) ? rawArgs.as_list().front() : rawArgs; torrent::Object::list_type& list = download_get_variable(download, first_key, second_key).as_list(); - if (std::find_if(list.begin(), list.end(), - rak::bind1st(std::ptr_fun(&torrent::object_equal), args)) == list.end()) + if (std::find_if(list.begin(), list.end(), [args](const torrent::Object& obj) { return torrent::object_equal(obj, args); }) == list.end()) list.push_back(rawArgs); return torrent::Object(); @@ -605,8 +604,7 @@ d_list_has(core::Download* download, const torrent::Object& rawArgs, const char* const torrent::Object& args = (rawArgs.is_list() && !rawArgs.as_list().empty()) ? rawArgs.as_list().front() : rawArgs; torrent::Object::list_type& list = download_get_variable(download, first_key, second_key).as_list(); - return (int64_t)(std::find_if(list.begin(), list.end(), - rak::bind1st(std::ptr_fun(&torrent::object_equal), args)) != list.end()); + return (int64_t)(std::find_if(list.begin(), list.end(), [args](const torrent::Object& obj) { return torrent::object_equal(obj, args); }) != list.end()); } torrent::Object @@ -614,7 +612,7 @@ d_list_remove(core::Download* download, const torrent::Object& rawArgs, const ch const torrent::Object& args = (rawArgs.is_list() && !rawArgs.as_list().empty()) ? rawArgs.as_list().front() : rawArgs; torrent::Object::list_type& list = download_get_variable(download, first_key, second_key).as_list(); - list.erase(std::remove_if(list.begin(), list.end(), rak::bind1st(std::ptr_fun(&torrent::object_equal), args)), list.end()); + list.erase(std::remove_if(list.begin(), list.end(), [args](const torrent::Object& obj) { return torrent::object_equal(obj, args); }), list.end()); return torrent::Object(); } diff --git a/src/command_groups.cc b/src/command_groups.cc index 3456c1da..5fdb12b1 100644 --- a/src/command_groups.cc +++ b/src/command_groups.cc @@ -121,8 +121,7 @@ cg_get_index(const torrent::Object& raw_args) { if (arg.is_string()) { if (!rpc::parse_whole_value_nothrow(arg.as_string().c_str(), &index)) { - std::vector::iterator itr = std::find_if(cg_list_hack.begin(), cg_list_hack.end(), - rak::equal(arg.as_string(), std::mem_fun(&torrent::choke_group::name))); + auto itr = std::find_if(cg_list_hack.begin(), cg_list_hack.end(), [&arg](torrent::choke_group* cg) { return arg.as_string() == cg->name(); }); if (itr == cg_list_hack.end()) throw torrent::input_error("Choke group not found."); @@ -162,8 +161,9 @@ void cg_d_group_set(core::Download* download, const torrent::Object& arg) { d torrent::Object apply_cg_list() { torrent::Object::list_type result; - for (std::vector::iterator itr = cg_list_hack.begin(), last = cg_list_hack.end(); itr != last; itr++) - result.push_back((*itr)->name()); + + for (auto itr : cg_list_hack) + result.push_back(itr->name()); return torrent::Object::from_list(result); } @@ -181,8 +181,7 @@ apply_cg_insert(const std::string& arg) { throw torrent::input_error("Cannot use a value string as choke group name."); if (arg.empty() || - std::find_if(cg_list_hack.begin(), cg_list_hack.end(), - rak::equal(arg, std::mem_fun(&torrent::choke_group::name))) != cg_list_hack.end()) + std::find_if(cg_list_hack.begin(), cg_list_hack.end(), [&arg](torrent::choke_group* cg) { return arg == cg->name(); }) != cg_list_hack.end()) throw torrent::input_error("Duplicate name for choke group."); cg_list_hack.push_back(new torrent::choke_group()); @@ -196,8 +195,7 @@ apply_cg_insert(const std::string& arg) { torrent::Object apply_cg_index_of(const std::string& arg) { - std::vector::iterator itr = - std::find_if(cg_list_hack.begin(), cg_list_hack.end(), rak::equal(arg, std::mem_fun(&torrent::choke_group::name))); + auto itr = std::find_if(cg_list_hack.begin(), cg_list_hack.end(), [&arg](torrent::choke_group* cg) { return arg == cg->name(); }); if (itr == cg_list_hack.end()) throw torrent::input_error("Choke group not found."); diff --git a/src/core/download_factory.cc b/src/core/download_factory.cc index 7d0dab94..8b5fedb1 100644 --- a/src/core/download_factory.cc +++ b/src/core/download_factory.cc @@ -1,39 +1,3 @@ -// rTorrent - BitTorrent client -// Copyright (C) 2005-2011, Jari Sundell -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// In addition, as a special exception, the copyright holders give -// permission to link the code of portions of this program with the -// OpenSSL library under certain conditions as described in each -// individual source file, and distribute linked combinations -// including the two. -// -// You must obey the GNU General Public License in all respects for -// all of the code used other than OpenSSL. If you modify file(s) -// with this exception, you may extend this exception to your version -// of the file(s), but you are not obligated to do so. If you do not -// wish to do so, delete this exception statement from your version. -// If you delete this exception statement from all source files in the -// program, then also delete it here. -// -// Contact: Jari Sundell -// -// Skomakerveien 33 -// 3185 Skoppum, NORWAY - #include "config.h" #include @@ -76,7 +40,7 @@ is_network_uri(const std::string& uri) { static bool download_factory_add_stream(torrent::Object* root, const char* key, const char* filename) { std::fstream stream(filename, std::ios::in | std::ios::binary); - + if (!stream.is_open()) return false; @@ -228,7 +192,7 @@ DownloadFactory::receive_success() { torrent::Object& meta = root->insert_key("rtorrent_meta_download", torrent::Object::create_map()); meta.insert_key("start", m_start); meta.insert_key("print_log", m_printLog); - + torrent::Object::list_type& commands = meta.insert_key("commands", torrent::Object::create_list()).as_list(); for (command_list_type::iterator itr = m_commands.begin(); itr != m_commands.end(); ++itr) @@ -238,7 +202,7 @@ DownloadFactory::receive_success() { if (m_session) { download_factory_add_stream(root, "rtorrent", (rak::path_expand(m_uri) + ".rtorrent").c_str()); download_factory_add_stream(root, "libtorrent_resume", (rak::path_expand(m_uri) + ".libtorrent_resume").c_str()); - + } else { // We only allow session torrents to keep their // 'rtorrent/libtorrent' sections. The "fast_resume" section @@ -321,8 +285,9 @@ DownloadFactory::receive_success() { if (torrent::log_groups[torrent::LOG_TORRENT_DEBUG].valid()) log_created(download, rtorrent); - std::for_each(m_commands.begin(), m_commands.end(), - rak::bind2nd(std::ptr_fun(&rpc::parse_command_multiple_std), rpc::make_target(download))); + std::for_each(m_commands.begin(), m_commands.end(), [&download](const std::string& cmd) { + rpc::parse_command_multiple_std(cmd, rpc::make_target(download)); + }); if (m_manager->download_list()->find(infohash) == m_manager->download_list()->end()) throw torrent::input_error("The newly created download was removed."); @@ -338,7 +303,7 @@ DownloadFactory::receive_success() { if (m_printLog) m_manager->push_log_std(msg); - + if (m_manager->download_list()->find(infohash) != m_manager->download_list()->end()) { // Should stop it, mark it bad. Perhaps even delete it? download->set_hash_failed(true); diff --git a/src/core/manager.cc b/src/core/manager.cc index f7b6721b..9be9a56e 100644 --- a/src/core/manager.cc +++ b/src/core/manager.cc @@ -294,12 +294,12 @@ Manager::set_proxy_address(const std::string& addr) { if ((err = rak::address_info::get_address_info(buf, PF_INET, SOCK_STREAM, &ai)) != 0) throw torrent::input_error("Could not set proxy address: " + std::string(rak::address_info::strerror(err)) + "."); - + try { ai->address()->set_port(port); torrent::connection_manager()->set_proxy_address(ai->address()->c_sockaddr()); - + rak::address_info::free_address_info(ai); } catch (torrent::input_error& e) { @@ -331,7 +331,7 @@ Manager::try_create_download(const std::string& uri, int flags, const command_li f->set_start(flags & create_start); f->set_print_log(!(flags & create_quiet)); - f->slot_finished(std::bind(&rak::call_delete_func, f)); + f->slot_finished([f]() { delete f; }); if (flags & create_raw_data) f->load_raw_data(uri); @@ -355,7 +355,7 @@ Manager::try_create_download_from_meta_download(torrent::Object* bencode, const f->set_start(meta.get_key_value("start")); f->set_print_log(meta.get_key_value("print_log")); - f->slot_finished(std::bind(&rak::call_delete_func, f)); + f->slot_finished([f]() { delete f; }); // Bit of a waste to create the bencode repesentation here // only to have the DownloadFactory decode it. @@ -408,9 +408,11 @@ path_expand(std::vector* paths, const std::string& pattern) { // Only include filenames starting with '.' if the pattern // starts with the same. itr->update((r.pattern()[0] != '.') ? utils::Directory::update_hide_dot : 0); - itr->erase(std::remove_if(itr->begin(), itr->end(), rak::on(rak::mem_ref(&utils::directory_entry::s_name), std::not1(r))), itr->end()); + itr->erase(std::remove_if(itr->begin(), itr->end(), [r](const utils::directory_entry& entry) { return !r(entry.s_name); }), itr->end()); - std::transform(itr->begin(), itr->end(), std::back_inserter(nextCache), rak::bind1st(std::ptr_fun(&path_expand_transform), itr->path() + (itr->path() == "/" ? "" : "/"))); + std::transform(itr->begin(), itr->end(), std::back_inserter(nextCache), [itr](const utils::directory_entry& entry) { + return path_expand_transform(itr->path() + (itr->path() == "/" ? "" : "/"), entry); + }); } currentCache.clear();