Date: Mon, 30 Dec 2013 15:52:15 +0100 (CET) From: Philip Paeps <philip@freebsd.org> To: FreeBSD-gnats-submit@freebsd.org Subject: ports/185295: [PATCH] Fix net-p2p/libtorrent build with clang on >10.x Message-ID: <20131230145215.E5B2C2800@rincewind.paeps.cx> Resent-Message-ID: <201312301500.rBUF01c9013068@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 185295 >Category: ports >Synopsis: [PATCH] Fix net-p2p/libtorrent build with clang on >10.x >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Mon Dec 30 15:00:01 UTC 2013 >Closed-Date: >Last-Modified: >Originator: Philip Paeps >Release: FreeBSD 10.0-PRERELEASE amd64 >Organization: Happily disorganised >Environment: System: FreeBSD rincewind.paeps.cx 10.0-PRERELEASE FreeBSD 10.0-PRERELEASE #16 r260042: Sun Dec 29 19:44:44 CET 2013 philip@rincewind:/usr/obj/usr/src/sys/RINCEWIND amd64 >Description: The devel/libtorrent-devel port depends on gcc on FreeBSD >10.x to work around C++ bugs in the code. It is (fairly) trivial to fix the bugs themselves though. The included patch was produced mostly with sed. >How-To-Repeat: Build devel/libtorrent-devel on FreeBSD >10.x >Fix: Index: Makefile =================================================================== --- Makefile (revision 336929) +++ Makefile (working copy) @@ -38,9 +38,9 @@ CONFIGURE_ARGS+= --disable-debug -# Workaround to build on > 10.x .if ${OSVERSION} >= 1000000 -USE_GCC= yes +CXXFLAGS+=-std=c++11 +EXTRA_PATCHES+=${PATCHDIR}/extra-patch-fix-clang-build.diff .endif post-patch: Index: files/extra-patch-fix-clang-build.diff =================================================================== --- files/extra-patch-fix-clang-build.diff (revision 0) +++ files/extra-patch-fix-clang-build.diff (working copy) @@ -0,0 +1,1852 @@ +--- rak/priority_queue_default.h ++++ rak/priority_queue_default.h +@@ -37,7 +37,7 @@ + #ifndef RAK_PRIORITY_QUEUE_DEFAULT_H + #define RAK_PRIORITY_QUEUE_DEFAULT_H + +-#include <tr1/functional> ++#include <functional> + #include <rak/allocators.h> + #include <rak/priority_queue.h> + #include <rak/timer.h> +@@ -48,7 +48,7 @@ namespace rak { + + class priority_item { + public: +- typedef std::tr1::function<void (void)> slot_void; ++ typedef std::function<void (void)> slot_void; + + priority_item() {} + ~priority_item() { +--- src/data/chunk_list.h ++++ src/data/chunk_list.h +@@ -39,7 +39,7 @@ + + #include <string> + #include <vector> +-#include <tr1/functional> ++#include <functional> + + #include "chunk.h" + #include "chunk_handle.h" +@@ -59,9 +59,9 @@ public: + typedef std::vector<ChunkListNode> base_type; + typedef std::vector<ChunkListNode*> Queue; + +- typedef std::tr1::function<Chunk* (uint32_t, int)> slot_chunk_index; +- typedef std::tr1::function<uint64_t ()> slot_value; +- typedef std::tr1::function<void (const std::string&)> slot_string; ++ typedef std::function<Chunk* (uint32_t, int)> slot_chunk_index; ++ typedef std::function<uint64_t ()> slot_value; ++ typedef std::function<void (const std::string&)> slot_string; + + using base_type::value_type; + using base_type::reference; +--- src/data/hash_check_queue.h ++++ src/data/hash_check_queue.h +@@ -39,7 +39,7 @@ + + #include <deque> + #include <pthread.h> +-#include <tr1/functional> ++#include <functional> + + #include "rak/allocators.h" + +@@ -51,7 +51,7 @@ class HashChunk; + class lt_cacheline_aligned HashCheckQueue : private std::deque<HashChunk*, rak::cacheline_allocator<HashChunk*> > { + public: + typedef std::deque<HashChunk*, rak::cacheline_allocator<HashChunk*> > base_type; +- typedef std::tr1::function<void (HashChunk*, const HashString&)> slot_chunk_handle; ++ typedef std::function<void (HashChunk*, const HashString&)> slot_chunk_handle; + + using base_type::iterator; + +--- src/data/hash_queue.cc ++++ src/data/hash_queue.cc +@@ -57,7 +57,6 @@ + #define LT_LOG_DATA(data, log_level, log_fmt, ...) \ + lt_log_print_data(LOG_STORAGE_##log_level, data, "hash_queue", log_fmt, __VA_ARGS__); + +-namespace tr1 { using namespace std::tr1; } + + namespace torrent { + +@@ -87,7 +86,7 @@ HashQueue::HashQueue(thread_disk* thread) : + m_thread_disk(thread) { + + pthread_mutex_init(&m_done_chunks_lock, NULL); +- m_thread_disk->hash_queue()->slot_chunk_done() = tr1::bind(&HashQueue::chunk_done, this, tr1::placeholders::_1, tr1::placeholders::_2); ++ m_thread_disk->hash_queue()->slot_chunk_done() = std::bind(&HashQueue::chunk_done, this, std::placeholders::_1, std::placeholders::_2); + } + + +@@ -176,9 +175,9 @@ HashQueue::work() { + // TODO: This is not optimal as we jump around... Check for front + // of HashQueue in done_chunks instead. + +- iterator itr = std::find_if(begin(), end(), tr1::bind(std::equal_to<HashChunk*>(), ++ iterator itr = std::find_if(begin(), end(), std::bind(std::equal_to<HashChunk*>(), + hash_chunk, +- tr1::bind(&HashQueueNode::get_chunk, tr1::placeholders::_1))); ++ std::bind(&HashQueueNode::get_chunk, std::placeholders::_1))); + + // TODO: Fix this... + if (itr == end()) +--- src/data/hash_queue.h ++++ src/data/hash_queue.h +@@ -40,7 +40,7 @@ + #include <deque> + #include <map> + #include <pthread.h> +-#include <tr1/functional> ++#include <functional> + + #include "torrent/hash_string.h" + #include "hash_queue_node.h" +@@ -63,7 +63,7 @@ public: + typedef std::map<HashChunk*, torrent::HashString> done_chunks_type; + + typedef HashQueueNode::slot_done_type slot_done_type; +- typedef std::tr1::function<void (bool)> slot_bool; ++ typedef std::function<void (bool)> slot_bool; + + using base_type::iterator; + +--- src/data/hash_queue_node.h ++++ src/data/hash_queue_node.h +@@ -38,7 +38,7 @@ + #define LIBTORRENT_DATA_HASH_QUEUE_NODE_H + + #include <string> +-#include <tr1/functional> ++#include <functional> + #include <inttypes.h> + + #include "chunk_handle.h" +@@ -50,7 +50,7 @@ class download_data; + + class HashQueueNode { + public: +- typedef std::tr1::function<void (ChunkHandle, const char*)> slot_done_type; ++ typedef std::function<void (ChunkHandle, const char*)> slot_done_type; + typedef download_data* id_type; + + HashQueueNode(id_type id, HashChunk* c, slot_done_type d) : +--- src/dht/dht_hash_map.h ++++ src/dht/dht_hash_map.h +@@ -40,7 +40,7 @@ + #include "config.h" + + #if HAVE_TR1 +-#include <tr1/unordered_map> ++#include <unordered_map> + #else + #include <map> + #endif +@@ -104,9 +104,9 @@ struct hashstring_ptr_equal : public std::binary_function<const HashString*, con + { return *one == *two; } + }; + +-class DhtNodeList : public std::tr1::unordered_map<const HashString*, DhtNode*, hashstring_ptr_hash, hashstring_ptr_equal> { ++class DhtNodeList : public std::unordered_map<const HashString*, DhtNode*, hashstring_ptr_hash, hashstring_ptr_equal> { + public: +- typedef std::tr1::unordered_map<const HashString*, DhtNode*, hashstring_ptr_hash, hashstring_ptr_equal> base_type; ++ typedef std::unordered_map<const HashString*, DhtNode*, hashstring_ptr_hash, hashstring_ptr_equal> base_type; + + // Define accessor iterator with more convenient access to the key and + // element values. Allows changing the map definition more easily if needed. +@@ -125,9 +125,9 @@ public: + + }; + +-class DhtTrackerList : public std::tr1::unordered_map<HashString, DhtTracker*, hashstring_hash> { ++class DhtTrackerList : public std::unordered_map<HashString, DhtTracker*, hashstring_hash> { + public: +- typedef std::tr1::unordered_map<HashString, DhtTracker*, hashstring_hash> base_type; ++ typedef std::unordered_map<HashString, DhtTracker*, hashstring_hash> base_type; + + template<typename T> + struct accessor_wrapper : public T { +--- src/dht/dht_router.cc ++++ src/dht/dht_router.cc +@@ -131,7 +131,7 @@ DhtRouter::start(int port) { + m_server.start(port); + + // Set timeout slot and schedule it to be called immediately for initial bootstrapping if necessary. +- m_taskTimeout.slot() = std::tr1::bind(&DhtRouter::receive_timeout_bootstrap, this); ++ m_taskTimeout.slot() = std::bind(&DhtRouter::receive_timeout_bootstrap, this); + priority_queue_insert(&taskScheduler, &m_taskTimeout, (cachedTime + rak::timer::from_seconds(1)).round_seconds()); + } + +@@ -410,7 +410,7 @@ DhtRouter::receive_timeout_bootstrap() { + delete m_contacts; + m_contacts = NULL; + +- m_taskTimeout.slot() = std::tr1::bind(&DhtRouter::receive_timeout, this); ++ m_taskTimeout.slot() = std::bind(&DhtRouter::receive_timeout, this); + + if (!m_numRefresh) { + // If we're still in the startup, do the usual refreshing too. +--- src/dht/dht_server.cc ++++ src/dht/dht_server.cc +@@ -154,7 +154,7 @@ DhtServer::start(int port) { + throw; + } + +- m_taskTimeout.slot() = std::tr1::bind(&DhtServer::receive_timeout, this); ++ m_taskTimeout.slot() = std::bind(&DhtServer::receive_timeout, this); + + m_uploadNode.set_list_iterator(m_uploadThrottle->end()); + m_uploadNode.slot_activate(rak::make_mem_fun(static_cast<SocketBase*>(this), &SocketBase::receive_throttle_up_activate)); +--- src/download/download_main.cc ++++ src/download/download_main.cc +@@ -64,7 +64,6 @@ + #include "download_main.h" + #include "download_wrapper.h" + +-namespace tr1 { using namespace std::tr1; } + + namespace torrent { + +@@ -103,11 +102,11 @@ DownloadMain::DownloadMain() : + m_tracker_list = new TrackerList(); + m_tracker_controller = new TrackerController(m_tracker_list); + +- m_tracker_list->slot_success() = tr1::bind(&TrackerController::receive_success, m_tracker_controller, tr1::placeholders::_1, tr1::placeholders::_2); +- m_tracker_list->slot_failure() = tr1::bind(&TrackerController::receive_failure, m_tracker_controller, tr1::placeholders::_1, tr1::placeholders::_2); +- m_tracker_list->slot_scrape_success() = tr1::bind(&TrackerController::receive_scrape, m_tracker_controller, tr1::placeholders::_1); +- m_tracker_list->slot_tracker_enabled() = tr1::bind(&TrackerController::receive_tracker_enabled, m_tracker_controller, tr1::placeholders::_1); +- m_tracker_list->slot_tracker_disabled() = tr1::bind(&TrackerController::receive_tracker_disabled, m_tracker_controller, tr1::placeholders::_1); ++ m_tracker_list->slot_success() = std::bind(&TrackerController::receive_success, m_tracker_controller, std::placeholders::_1, std::placeholders::_2); ++ m_tracker_list->slot_failure() = std::bind(&TrackerController::receive_failure, m_tracker_controller, std::placeholders::_1, std::placeholders::_2); ++ m_tracker_list->slot_scrape_success() = std::bind(&TrackerController::receive_scrape, m_tracker_controller, std::placeholders::_1); ++ m_tracker_list->slot_tracker_enabled() = std::bind(&TrackerController::receive_tracker_enabled, m_tracker_controller, std::placeholders::_1); ++ m_tracker_list->slot_tracker_disabled() = std::bind(&TrackerController::receive_tracker_disabled, m_tracker_controller, std::placeholders::_1); + + m_connectionList = new ConnectionList(this); + +@@ -119,12 +118,12 @@ DownloadMain::DownloadMain() : + m_delegator.transfer_list()->slot_completed(std::bind1st(std::mem_fun(&DownloadMain::receive_chunk_done), this)); + m_delegator.transfer_list()->slot_corrupt(std::bind1st(std::mem_fun(&DownloadMain::receive_corrupt_chunk), this)); + +- m_delayDisconnectPeers.slot() = std::tr1::bind(&ConnectionList::disconnect_queued, m_connectionList); +- m_taskTrackerRequest.slot() = std::tr1::bind(&DownloadMain::receive_tracker_request, this); ++ m_delayDisconnectPeers.slot() = std::bind(&ConnectionList::disconnect_queued, m_connectionList); ++ m_taskTrackerRequest.slot() = std::bind(&DownloadMain::receive_tracker_request, this); + + m_chunkList->set_data(file_list()->mutable_data()); +- m_chunkList->slot_create_chunk() = tr1::bind(&FileList::create_chunk_index, file_list(), tr1::placeholders::_1, tr1::placeholders::_2); +- m_chunkList->slot_free_diskspace() = tr1::bind(&FileList::free_diskspace, file_list()); ++ m_chunkList->slot_create_chunk() = std::bind(&FileList::create_chunk_index, file_list(), std::placeholders::_1, std::placeholders::_2); ++ m_chunkList->slot_free_diskspace() = std::bind(&FileList::free_diskspace, file_list()); + } + + DownloadMain::~DownloadMain() { +--- src/download/download_wrapper.cc ++++ src/download/download_wrapper.cc +@@ -61,7 +61,6 @@ + + #include "download_wrapper.h" + +-namespace tr1 { using namespace std::tr1; } + + namespace torrent { + +@@ -72,13 +71,13 @@ DownloadWrapper::DownloadWrapper() : + m_hashChecker(NULL), + m_connectionType(0) { + +- m_main->delay_download_done().slot() = std::tr1::bind(&download_data::call_download_done, data()); ++ m_main->delay_download_done().slot() = std::bind(&download_data::call_download_done, data()); + + m_main->tracker_list()->set_info(info()); +- m_main->tracker_controller()->slot_success() = tr1::bind(&DownloadWrapper::receive_tracker_success, this, tr1::placeholders::_1); +- m_main->tracker_controller()->slot_failure() = tr1::bind(&DownloadWrapper::receive_tracker_failed, this, tr1::placeholders::_1); ++ m_main->tracker_controller()->slot_success() = std::bind(&DownloadWrapper::receive_tracker_success, this, std::placeholders::_1); ++ m_main->tracker_controller()->slot_failure() = std::bind(&DownloadWrapper::receive_tracker_failed, this, std::placeholders::_1); + +- m_main->chunk_list()->slot_storage_error() = tr1::bind(&DownloadWrapper::receive_storage_error, this, tr1::placeholders::_1); ++ m_main->chunk_list()->slot_storage_error() = std::bind(&DownloadWrapper::receive_storage_error, this, std::placeholders::_1); + } + + DownloadWrapper::~DownloadWrapper() { +@@ -107,8 +106,8 @@ DownloadWrapper::initialize(const std::string& hash, const std::string& id) { + + info()->mutable_local_id().assign(id.c_str()); + +- info()->slot_left() = tr1::bind(&FileList::left_bytes, m_main->file_list()); +- info()->slot_completed() = tr1::bind(&FileList::completed_bytes, m_main->file_list()); ++ info()->slot_left() = std::bind(&FileList::left_bytes, m_main->file_list()); ++ info()->slot_completed() = std::bind(&FileList::completed_bytes, m_main->file_list()); + + file_list()->mutable_data()->mutable_hash().assign(hash.c_str()); + +@@ -121,7 +120,7 @@ DownloadWrapper::initialize(const std::string& hash, const std::string& id) { + m_hashChecker->slot_check(rak::make_mem_fun(this, &DownloadWrapper::check_chunk_hash)); + // m_hashChecker->slot_storage_error(rak::make_mem_fun(this, &DownloadWrapper::receive_storage_error)); + +- m_hashChecker->delay_checked().slot() = std::tr1::bind(&DownloadWrapper::receive_initial_hash, this); ++ m_hashChecker->delay_checked().slot() = std::bind(&DownloadWrapper::receive_initial_hash, this); + } + + void +@@ -240,7 +239,7 @@ DownloadWrapper::check_chunk_hash(ChunkHandle handle) { + ChunkHandle new_handle = m_main->chunk_list()->get(handle.index(), ChunkList::get_blocking); + m_main->chunk_list()->release(&handle); + +- hash_queue()->push_back(new_handle, data(), tr1::bind(&DownloadWrapper::receive_hash_done, this, tr1::placeholders::_1, tr1::placeholders::_2)); ++ hash_queue()->push_back(new_handle, data(), std::bind(&DownloadWrapper::receive_hash_done, this, std::placeholders::_1, std::placeholders::_2)); + } + + void +--- src/manager.cc ++++ src/manager.cc +@@ -59,7 +59,6 @@ + + #include "manager.h" + +-namespace tr1 { using namespace std::tr1; } + + namespace torrent { + +@@ -83,12 +82,12 @@ Manager::Manager() : + + m_hashQueue = new HashQueue(&m_main_thread_disk); + m_hashQueue->slot_has_work() = +- tr1::bind(&thread_base::send_event_signal, ++ std::bind(&thread_base::send_event_signal, + &m_main_thread_main, +- m_main_thread_main.signal_bitfield()->add_signal(tr1::bind(&HashQueue::work, m_hashQueue)), +- tr1::placeholders::_1); ++ m_main_thread_main.signal_bitfield()->add_signal(std::bind(&HashQueue::work, m_hashQueue)), ++ std::placeholders::_1); + +- m_taskTick.slot() = std::tr1::bind(&Manager::receive_tick, this); ++ m_taskTick.slot() = std::bind(&Manager::receive_tick, this); + + priority_queue_insert(&taskScheduler, &m_taskTick, cachedTime.round_seconds()); + +--- src/net/throttle_internal.cc ++++ src/net/throttle_internal.cc +@@ -62,7 +62,7 @@ ThrottleInternal::ThrottleInternal(int flags) : + m_timeLastTick(cachedTime) { + + if (is_root()) +- m_taskTick.slot() = std::tr1::bind(&ThrottleInternal::receive_tick, this); ++ m_taskTick.slot() = std::bind(&ThrottleInternal::receive_tick, this); + } + + ThrottleInternal::~ThrottleInternal() { +--- src/protocol/handshake.cc ++++ src/protocol/handshake.cc +@@ -100,7 +100,7 @@ Handshake::Handshake(SocketFd fd, HandshakeManager* m, int encryptionOptions) : + m_writeBuffer.reset(); + + m_taskTimeout.clear_time(); +- m_taskTimeout.slot() = std::tr1::bind(&HandshakeManager::receive_timeout, m, this); ++ m_taskTimeout.slot() = std::bind(&HandshakeManager::receive_timeout, m, this); + } + + Handshake::~Handshake() { +--- src/torrent/connection_manager.cc ++++ src/torrent/connection_manager.cc +@@ -47,7 +47,6 @@ + #include "error.h" + #include "exceptions.h" + +-namespace tr1 { using namespace std::tr1; } + + namespace torrent { + +@@ -90,11 +89,11 @@ ConnectionManager::ConnectionManager() : + m_proxyAddress = (new rak::socket_address())->c_sockaddr(); + rak::socket_address::cast_from(m_proxyAddress)->sa_inet()->clear(); + +- m_slot_resolver = tr1::bind(&resolve_host, +- tr1::placeholders::_1, +- tr1::placeholders::_2, +- tr1::placeholders::_3, +- tr1::placeholders::_4); ++ m_slot_resolver = std::bind(&resolve_host, ++ std::placeholders::_1, ++ std::placeholders::_2, ++ std::placeholders::_3, ++ std::placeholders::_4); + } + + ConnectionManager::~ConnectionManager() { +--- src/torrent/connection_manager.h ++++ src/torrent/connection_manager.h +@@ -47,7 +47,7 @@ + #include <netinet/in_systm.h> + #include <netinet/ip.h> + #include <sys/socket.h> +-#include <tr1/functional> ++#include <functional> + #include <torrent/common.h> + + namespace torrent { +@@ -99,12 +99,12 @@ public: + handshake_retry_encrypted = 9 + }; + +- typedef std::tr1::function<uint32_t (const sockaddr*)> slot_filter_type; +- typedef std::tr1::function<ThrottlePair (const sockaddr*)> slot_throttle_type; ++ typedef std::function<uint32_t (const sockaddr*)> slot_filter_type; ++ typedef std::function<ThrottlePair (const sockaddr*)> slot_throttle_type; + + // The sockaddr argument in the result slot call is NULL if the resolve failed, and the int holds the errno. +- typedef std::tr1::function<void (const sockaddr*, int)> slot_resolver_result_type; +- typedef std::tr1::function<slot_resolver_result_type* (const char*, int, int, slot_resolver_result_type)> slot_resolver_type; ++ typedef std::function<void (const sockaddr*, int)> slot_resolver_result_type; ++ typedef std::function<slot_resolver_result_type* (const char*, int, int, slot_resolver_result_type)> slot_resolver_type; + + ConnectionManager(); + ~ConnectionManager(); +--- src/torrent/data/download_data.h ++++ src/torrent/data/download_data.h +@@ -37,7 +37,7 @@ + #ifndef LIBTORRENT_DATA_DOWNLOAD_DATA_H + #define LIBTORRENT_DATA_DOWNLOAD_DATA_H + +-#include <tr1/functional> ++#include <functional> + + #include <torrent/common.h> + #include <torrent/bitfield.h> +@@ -57,7 +57,7 @@ public: + + typedef void (function_void)(void); + +- typedef std::tr1::function<function_void> slot_void; ++ typedef std::function<function_void> slot_void; + + download_data() : m_wanted_chunks(0) {} + +--- src/torrent/download/choke_group.cc ++++ src/torrent/download/choke_group.cc +@@ -37,7 +37,7 @@ + #include "config.h" + + #include <algorithm> +-#include <tr1/functional> ++#include <functional> + + #include "choke_group.h" + #include "choke_queue.h" +@@ -48,7 +48,6 @@ + #include "torrent/exceptions.h" + #include "download/download_main.h" + +-namespace tr1 { using namespace std::tr1; } + + namespace torrent { + +@@ -61,14 +60,14 @@ uint64_t + choke_group::up_rate() const { + return + std::for_each(m_first, m_last, +- rak::accumulate((uint64_t)0, tr1::bind(&Rate::rate, tr1::bind(&resource_manager_entry::up_rate, tr1::placeholders::_1)))).result; ++ rak::accumulate((uint64_t)0, std::bind(&Rate::rate, std::bind(&resource_manager_entry::up_rate, std::placeholders::_1)))).result; + } + + uint64_t + choke_group::down_rate() const { + return + std::for_each(m_first, m_last, +- rak::accumulate((uint64_t)0, tr1::bind(&Rate::rate, tr1::bind(&resource_manager_entry::down_rate, tr1::placeholders::_1)))).result; ++ rak::accumulate((uint64_t)0, std::bind(&Rate::rate, std::bind(&resource_manager_entry::down_rate, std::placeholders::_1)))).result; + } + + } +--- src/torrent/download/choke_queue.cc ++++ src/torrent/download/choke_queue.cc +@@ -40,7 +40,7 @@ + #include <functional> + #include <numeric> + #include <cstdlib> +-#include <tr1/functional> ++#include <functional> + + #include "protocol/peer_connection_base.h" + #include "torrent/download/group_entry.h" +--- src/torrent/download/choke_queue.h ++++ src/torrent/download/choke_queue.h +@@ -42,7 +42,7 @@ + #include <list> + #include <vector> + #include <inttypes.h> +-#include <tr1/functional> ++#include <functional> + #include <torrent/download/group_entry.h> + + namespace torrent { +@@ -66,9 +66,9 @@ struct group_stats { + + class LIBTORRENT_EXPORT choke_queue { + public: +- typedef std::tr1::function<void (int)> slot_unchoke; +- typedef std::tr1::function<int ()> slot_can_unchoke; +- typedef std::tr1::function<bool (PeerConnectionBase*, bool)> slot_connection; ++ typedef std::function<void (int)> slot_unchoke; ++ typedef std::function<int ()> slot_can_unchoke; ++ typedef std::function<bool (PeerConnectionBase*, bool)> slot_connection; + + typedef std::vector<weighted_connection> container_type; + typedef container_type::value_type value_type; +--- src/torrent/download/group_entry.h ++++ src/torrent/download/group_entry.h +@@ -39,7 +39,7 @@ + + #include <algorithm> + #include <vector> +-#include <tr1/functional> ++#include <functional> + #include <torrent/common.h> + #include <torrent/exceptions.h> + +@@ -104,7 +104,7 @@ private: + + inline void group_entry::connection_unchoked(PeerConnectionBase* pcb) { + container_type::iterator itr = std::find_if(m_unchoked.begin(), m_unchoked.end(), +- std::tr1::bind(&weighted_connection::operator==, std::tr1::placeholders::_1, pcb)); ++ std::bind(&weighted_connection::operator==, std::placeholders::_1, pcb)); + + if (itr != m_unchoked.end()) throw internal_error("group_entry::connection_unchoked(pcb) failed."); + +@@ -113,7 +113,7 @@ inline void group_entry::connection_unchoked(PeerConnectionBase* pcb) { + + inline void group_entry::connection_queued(PeerConnectionBase* pcb) { + container_type::iterator itr = std::find_if(m_queued.begin(), m_queued.end(), +- std::tr1::bind(&weighted_connection::operator==, std::tr1::placeholders::_1, pcb)); ++ std::bind(&weighted_connection::operator==, std::placeholders::_1, pcb)); + + if (itr != m_queued.end()) throw internal_error("group_entry::connection_queued(pcb) failed."); + +@@ -123,7 +123,7 @@ inline void group_entry::connection_queued(PeerConnectionBase* pcb) { + inline void + group_entry::connection_choked(PeerConnectionBase* pcb) { + container_type::iterator itr = std::find_if(m_unchoked.begin(), m_unchoked.end(), +- std::tr1::bind(&weighted_connection::operator==, std::tr1::placeholders::_1, pcb)); ++ std::bind(&weighted_connection::operator==, std::placeholders::_1, pcb)); + + if (itr == m_unchoked.end()) throw internal_error("group_entry::connection_choked(pcb) failed."); + +@@ -134,7 +134,7 @@ group_entry::connection_choked(PeerConnectionBase* pcb) { + inline void + group_entry::connection_unqueued(PeerConnectionBase* pcb) { + container_type::iterator itr = std::find_if(m_queued.begin(), m_queued.end(), +- std::tr1::bind(&weighted_connection::operator==, std::tr1::placeholders::_1, pcb)); ++ std::bind(&weighted_connection::operator==, std::placeholders::_1, pcb)); + + if (itr == m_queued.end()) throw internal_error("group_entry::connection_unqueued(pcb) failed."); + +--- src/torrent/download/resource_manager.cc ++++ src/torrent/download/resource_manager.cc +@@ -38,7 +38,7 @@ + + #include <algorithm> + #include <functional> +-#include <tr1/functional> ++#include <functional> + #include <limits> + #include <rak/functional.h> + +@@ -51,7 +51,6 @@ + #include "choke_queue.h" + #include "resource_manager.h" + +-namespace tr1 { using namespace std::tr1; } + + namespace torrent { + +@@ -73,12 +72,12 @@ ResourceManager::ResourceManager() : + choke_base_type::back()->up_queue()->set_heuristics(choke_queue::HEURISTICS_UPLOAD_LEECH); + choke_base_type::back()->down_queue()->set_heuristics(choke_queue::HEURISTICS_DOWNLOAD_LEECH); + +- choke_base_type::back()->up_queue()->set_slot_unchoke(tr1::bind(&ResourceManager::receive_upload_unchoke, this, tr1::placeholders::_1)); +- choke_base_type::back()->down_queue()->set_slot_unchoke(tr1::bind(&ResourceManager::receive_download_unchoke, this, tr1::placeholders::_1)); +- choke_base_type::back()->up_queue()->set_slot_can_unchoke(tr1::bind(&ResourceManager::retrieve_upload_can_unchoke, this)); +- choke_base_type::back()->down_queue()->set_slot_can_unchoke(tr1::bind(&ResourceManager::retrieve_download_can_unchoke, this)); +- choke_base_type::back()->up_queue()->set_slot_connection(tr1::bind(&PeerConnectionBase::receive_upload_choke, tr1::placeholders::_1, tr1::placeholders::_2)); +- choke_base_type::back()->down_queue()->set_slot_connection(tr1::bind(&PeerConnectionBase::receive_download_choke, tr1::placeholders::_1, tr1::placeholders::_2)); ++ choke_base_type::back()->up_queue()->set_slot_unchoke(std::bind(&ResourceManager::receive_upload_unchoke, this, std::placeholders::_1)); ++ choke_base_type::back()->down_queue()->set_slot_unchoke(std::bind(&ResourceManager::receive_download_unchoke, this, std::placeholders::_1)); ++ choke_base_type::back()->up_queue()->set_slot_can_unchoke(std::bind(&ResourceManager::retrieve_upload_can_unchoke, this)); ++ choke_base_type::back()->down_queue()->set_slot_can_unchoke(std::bind(&ResourceManager::retrieve_download_can_unchoke, this)); ++ choke_base_type::back()->up_queue()->set_slot_connection(std::bind(&PeerConnectionBase::receive_upload_choke, std::placeholders::_1, std::placeholders::_2)); ++ choke_base_type::back()->down_queue()->set_slot_connection(std::bind(&PeerConnectionBase::receive_download_choke, std::placeholders::_1, std::placeholders::_2)); + } + + ResourceManager::~ResourceManager() { +--- src/torrent/download_info.h ++++ src/torrent/download_info.h +@@ -40,7 +40,7 @@ + #include <list> + #include <string> + #include <inttypes.h> +-#include <tr1/functional> ++#include <functional> + + #include <torrent/rate.h> + #include <torrent/hash_string.h> +@@ -54,13 +54,13 @@ class DownloadMain; + + class DownloadInfo { + public: +- typedef std::tr1::function<uint64_t ()> slot_stat_type; +- typedef std::tr1::function<void (uint32_t)> slot_chunk_type; ++ typedef std::function<uint64_t ()> slot_stat_type; ++ typedef std::function<void (uint32_t)> slot_chunk_type; + +- typedef std::list<std::tr1::function<void ()> > signal_void_type; +- typedef std::list<std::tr1::function<void (const std::string&)> > signal_string_type; ++ typedef std::list<std::function<void ()> > signal_void_type; ++ typedef std::list<std::function<void (const std::string&)> > signal_string_type; + typedef std::list<slot_chunk_type> signal_chunk_type; +- typedef std::list<std::tr1::function<void (const std::string&, const char*, size_t)> > signal_dump_type; ++ typedef std::list<std::function<void (const std::string&, const char*, size_t)> > signal_dump_type; + + enum State { + NONE, +--- src/torrent/http.h ++++ src/torrent/http.h +@@ -40,7 +40,7 @@ + #include <string> + #include <iosfwd> + #include <list> +-#include <tr1/functional> ++#include <functional> + #include <torrent/common.h> + + namespace torrent { +@@ -51,9 +51,9 @@ namespace torrent { + // Keep in mind that these objects get reused. + class LIBTORRENT_EXPORT Http { + public: +- typedef std::tr1::function<void ()> slot_void; +- typedef std::tr1::function<void (const std::string&)> slot_string; +- typedef std::tr1::function<Http* (void)> slot_http; ++ typedef std::function<void ()> slot_void; ++ typedef std::function<void (const std::string&)> slot_string; ++ typedef std::function<Http* (void)> slot_http; + + typedef std::list<slot_void> signal_void; + typedef std::list<slot_string> signal_string; +--- src/torrent/peer/client_list.cc ++++ src/torrent/peer/client_list.cc +@@ -38,7 +38,7 @@ + + #include <algorithm> + #include <rak/string_manip.h> +-#include <tr1/functional> ++#include <functional> + + #include "client_list.h" + #include "exceptions.h" +@@ -227,7 +227,7 @@ ClientList::retrieve_id(ClientInfo* dest, const HashString& id) const { + return false; + } + +- const_iterator itr = std::find_if(begin() + 1, end(), std::tr1::bind(&ClientInfo::intersects, *dest, std::tr1::placeholders::_1)); ++ const_iterator itr = std::find_if(begin() + 1, end(), std::bind(&ClientInfo::intersects, *dest, std::placeholders::_1)); + + if (itr == end()) + dest->set_info(begin()->info()); +--- src/torrent/peer/connection_list.h ++++ src/torrent/peer/connection_list.h +@@ -39,7 +39,7 @@ + + #include <list> + #include <vector> +-#include <tr1/functional> ++#include <functional> + #include <torrent/common.h> + #include <torrent/hash_string.h> + +@@ -66,7 +66,7 @@ public: + typedef std::vector<Peer*> base_type; + typedef std::vector<HashString> queue_type; + typedef uint32_t size_type; +- typedef std::tr1::function<void (Peer*)> slot_peer_type; ++ typedef std::function<void (Peer*)> slot_peer_type; + typedef std::list<slot_peer_type> signal_peer_type; + + typedef PeerConnectionBase* (*slot_new_conn_type)(bool encrypted); +--- src/torrent/poll.h ++++ src/torrent/poll.h +@@ -37,7 +37,7 @@ + #ifndef LIBTORRENT_TORRENT_POLL_H + #define LIBTORRENT_TORRENT_POLL_H + +-#include <tr1/functional> ++#include <functional> + #include <torrent/common.h> + + namespace torrent { +@@ -46,7 +46,7 @@ class Event; + + class LIBTORRENT_EXPORT Poll { + public: +- typedef std::tr1::function<Poll* ()> slot_poll; ++ typedef std::function<Poll* ()> slot_poll; + + static const int poll_worker_thread = 0x1; + static const uint32_t flag_waive_global_lock = 0x1; +--- src/torrent/tracker_controller.cc ++++ src/torrent/tracker_controller.cc +@@ -50,7 +50,6 @@ + #define LT_LOG_TRACKER(log_level, log_fmt, ...) \ + lt_log_print_info(LOG_TRACKER_##log_level, m_tracker_list->info(), "tracker_controller", log_fmt, __VA_ARGS__); + +-namespace tr1 { using namespace std::tr1; } + + namespace torrent { + +@@ -91,8 +90,8 @@ TrackerController::TrackerController(TrackerList* trackers) : + m_tracker_list(trackers), + m_private(new tracker_controller_private) { + +- m_private->task_timeout.slot() = std::tr1::bind(&TrackerController::do_timeout, this); +- m_private->task_scrape.slot() = std::tr1::bind(&TrackerController::do_scrape, this); ++ m_private->task_timeout.slot() = std::bind(&TrackerController::do_timeout, this); ++ m_private->task_scrape.slot() = std::bind(&TrackerController::do_scrape, this); + } + + TrackerController::~TrackerController() { +--- src/torrent/tracker_controller.h ++++ src/torrent/tracker_controller.h +@@ -38,7 +38,7 @@ + #define LIBTORRENT_TRACKER_CONTROLLER_H + + #include <string> +-#include <tr1/functional> ++#include <functional> + #include <torrent/common.h> + #include <torrent/tracker.h> + +@@ -55,10 +55,10 @@ class LIBTORRENT_EXPORT TrackerController { + public: + typedef AddressList address_list; + +- typedef std::tr1::function<void (void)> slot_void; +- typedef std::tr1::function<void (const std::string&)> slot_string; +- typedef std::tr1::function<uint32_t (AddressList*)> slot_address_list; +- typedef std::tr1::function<void (Tracker*)> slot_tracker; ++ typedef std::function<void (void)> slot_void; ++ typedef std::function<void (const std::string&)> slot_string; ++ typedef std::function<uint32_t (AddressList*)> slot_address_list; ++ typedef std::function<void (Tracker*)> slot_tracker; + + static const int flag_send_update = 0x1; + static const int flag_send_completed = 0x2; +--- src/torrent/tracker_list.cc ++++ src/torrent/tracker_list.cc +@@ -56,7 +56,6 @@ + #define LT_LOG_TRACKER(log_level, log_fmt, ...) \ + lt_log_print_info(LOG_TRACKER_##log_level, info(), "tracker_list", log_fmt, __VA_ARGS__); + +-namespace tr1 { using namespace std::tr1; } + + namespace torrent { + +@@ -221,8 +220,8 @@ TrackerList::insert_url(unsigned int group, const std::string& url, bool extra_t + + TrackerList::iterator + TrackerList::find_url(const std::string& url) { +- return std::find_if(begin(), end(), tr1::bind(std::equal_to<std::string>(), url, +- tr1::bind(&Tracker::url, tr1::placeholders::_1))); ++ return std::find_if(begin(), end(), std::bind(std::equal_to<std::string>(), url, ++ std::bind(&Tracker::url, std::placeholders::_1))); + } + + TrackerList::iterator +--- src/torrent/tracker_list.h ++++ src/torrent/tracker_list.h +@@ -41,7 +41,7 @@ + #include <string> + #include <vector> + #include <torrent/common.h> +-#include <tr1/functional> ++#include <functional> + + namespace torrent { + +@@ -64,9 +64,9 @@ public: + typedef std::vector<Tracker*> base_type; + typedef AddressList address_list; + +- typedef std::tr1::function<void (Tracker*)> slot_tracker; +- typedef std::tr1::function<void (Tracker*, const std::string&)> slot_string; +- typedef std::tr1::function<uint32_t (Tracker*, AddressList*)> slot_address_list; ++ typedef std::function<void (Tracker*)> slot_tracker; ++ typedef std::function<void (Tracker*, const std::string&)> slot_string; ++ typedef std::function<uint32_t (Tracker*, AddressList*)> slot_address_list; + + using base_type::value_type; + +--- src/torrent/utils/extents.h ++++ src/torrent/utils/extents.h +@@ -37,7 +37,7 @@ + #ifndef LIBTORRENT_UTILS_EXTENTS_H + #define LIBTORRENT_UTILS_EXTENTS_H + +-#include <tr1/array> ++#include <array> + + namespace torrent { + +@@ -48,7 +48,7 @@ struct extents_base { + typedef std::pair<extents_base*, Tp> mapped_type; + typedef Tp mapped_value_type; + +- typedef std::tr1::array<mapped_type, TableSize> table_type; ++ typedef std::array<mapped_type, TableSize> table_type; + + extents_base(key_type pos, unsigned int mb, mapped_value_type val) : + mask_bits(mb), position(pos) { table.assign(mapped_type(NULL, mapped_value_type())); } +--- src/torrent/utils/log.cc ++++ src/torrent/utils/log.cc +@@ -54,10 +54,9 @@ + #include <fstream> + #include <functional> + #include <memory> +-#include <tr1/functional> +-#include <tr1/memory> ++#include <functional> ++#include <memory> + +-namespace tr1 { using namespace std::tr1; } + + namespace torrent { + +@@ -134,7 +133,7 @@ log_rebuild_cache() { + + log_cache_list::iterator cache_itr = + std::find_if(log_cache.begin(), log_cache.end(), +- tr1::bind(&log_cache_entry::equal_outputs, tr1::placeholders::_1, use_outputs)); ++ std::bind(&log_cache_entry::equal_outputs, std::placeholders::_1, use_outputs)); + + if (cache_itr == log_cache.end()) { + cache_itr = log_cache.insert(log_cache.end(), log_cache_entry()); +@@ -174,14 +173,14 @@ log_group::internal_print(const HashString* hash, const char* subsystem, const v + return; + + pthread_mutex_lock(&log_mutex); +- std::for_each(m_first, m_last, tr1::bind(&log_slot::operator(), +- tr1::placeholders::_1, ++ std::for_each(m_first, m_last, std::bind(&log_slot::operator(), ++ std::placeholders::_1, + buffer, + std::distance(buffer, first), + std::distance(log_groups.begin(), this))); + if (dump_data != NULL) + std::for_each(m_first, m_last, +- tr1::bind(&log_slot::operator(), tr1::placeholders::_1, (const char*)dump_data, dump_size, -1)); ++ std::bind(&log_slot::operator(), std::placeholders::_1, (const char*)dump_data, dump_size, -1)); + pthread_mutex_unlock(&log_mutex); + } + +@@ -325,7 +324,7 @@ log_remove_child(int group, int child) { + const char log_level_char[] = { 'C', 'E', 'W', 'N', 'I', 'D' }; + + void +-log_file_write(tr1::shared_ptr<std::ofstream>& outfile, const char* data, size_t length, int group) { ++log_file_write(std::shared_ptr<std::ofstream>& outfile, const char* data, size_t length, int group) { + // Add group name, data, etc as flags. + + // Normal groups are nul-terminated strings. +@@ -345,14 +344,14 @@ log_file_write(tr1::shared_ptr<std::ofstream>& outfile, const char* data, size_t + // etc. + void + log_open_file_output(const char* name, const char* filename) { +- tr1::shared_ptr<std::ofstream> outfile(new std::ofstream(filename)); ++ std::shared_ptr<std::ofstream> outfile(new std::ofstream(filename)); + + if (!outfile->good()) + throw input_error("Could not open log file '" + std::string(filename) + "'."); + +- // log_open_output(name, tr1::bind(&std::ofstream::write, outfile, tr1::placeholders::_1, tr1::placeholders::_2)); +- log_open_output(name, tr1::bind(&log_file_write, outfile, +- tr1::placeholders::_1, tr1::placeholders::_2, tr1::placeholders::_3)); ++ // log_open_output(name, std::bind(&std::ofstream::write, outfile, std::placeholders::_1, std::placeholders::_2)); ++ log_open_output(name, std::bind(&log_file_write, outfile, ++ std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + } + + log_buffer* +@@ -360,8 +359,8 @@ log_open_log_buffer(const char* name) { + log_buffer* buffer = new log_buffer; + + try { +- log_open_output(name, tr1::bind(&log_buffer::lock_and_push_log, buffer, +- tr1::placeholders::_1, tr1::placeholders::_2, tr1::placeholders::_3)); ++ log_open_output(name, std::bind(&log_buffer::lock_and_push_log, buffer, ++ std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + return buffer; + + } catch (torrent::input_error& e) { +--- src/torrent/utils/log.h ++++ src/torrent/utils/log.h +@@ -39,8 +39,8 @@ + + #include <string> + #include <vector> +-#include <tr1/array> +-#include <tr1/functional> ++#include <array> ++#include <functional> + #include <torrent/common.h> + + namespace torrent { +@@ -147,7 +147,7 @@ class DownloadInfo; + class download_data; + class log_buffer; + +-typedef std::tr1::function<void (const char*, unsigned int, int)> log_slot; ++typedef std::function<void (const char*, unsigned int, int)> log_slot; + typedef std::vector<std::pair<std::string, log_slot> > log_output_list; + + class LIBTORRENT_EXPORT log_group { +@@ -185,7 +185,7 @@ private: + log_slot* m_last; + }; + +-typedef std::tr1::array<log_group, LOG_GROUP_MAX_SIZE> log_group_list; ++typedef std::array<log_group, LOG_GROUP_MAX_SIZE> log_group_list; + + extern log_group_list log_groups LIBTORRENT_EXPORT; + extern log_output_list log_outputs LIBTORRENT_EXPORT; +--- src/torrent/utils/log_buffer.cc ++++ src/torrent/utils/log_buffer.cc +@@ -39,11 +39,10 @@ + #include "log_buffer.h" + + #include <functional> +-#include <tr1/functional> ++#include <functional> + + #include "globals.h" + +-namespace tr1 { using namespace std::tr1; } + + namespace torrent { + +@@ -53,7 +52,7 @@ log_buffer::find_older(int32_t older_than) { + if (empty() || !back().is_younger_than(older_than)) + return end(); + +- return std::find_if(begin(), end(), tr1::bind(&log_entry::is_younger_or_same, tr1::placeholders::_1, older_than)); ++ return std::find_if(begin(), end(), std::bind(&log_entry::is_younger_or_same, std::placeholders::_1, older_than)); + } + + void +--- src/torrent/utils/log_buffer.h ++++ src/torrent/utils/log_buffer.h +@@ -40,7 +40,7 @@ + #include <string> + #include <deque> + #include <pthread.h> +-#include <tr1/functional> ++#include <functional> + #include <torrent/common.h> + + namespace torrent { +@@ -60,7 +60,7 @@ struct log_entry { + class LIBTORRENT_EXPORT log_buffer : private std::deque<log_entry> { + public: + typedef std::deque<log_entry> base_type; +- typedef std::tr1::function<void ()> slot_void; ++ typedef std::function<void ()> slot_void; + + using base_type::iterator; + using base_type::const_iterator; +--- src/torrent/utils/net.h ++++ src/torrent/utils/net.h +@@ -38,12 +38,12 @@ + #define LIBTORRENT_UTILS_NET_H + + #include <netdb.h> +-#include <tr1/functional> ++#include <functional> + + namespace torrent { + +-typedef std::tr1::function<void (sockaddr*, socklen_t)> slot_ai_success; +-//typedef std::tr1::function<void (const char*, int)> slot_ai_failure; ++typedef std::function<void (sockaddr*, socklen_t)> slot_ai_success; ++//typedef std::function<void (const char*, int)> slot_ai_failure; + + // Throws address_info_error on lookup failure. + addrinfo* address_info_lookup(const char* hostname, int family, int socktype); +--- src/torrent/utils/signal_bitfield.h ++++ src/torrent/utils/signal_bitfield.h +@@ -37,7 +37,7 @@ + #ifndef LIBTORRENT_UTILS_SIGNAL_BITFIELD_H + #define LIBTORRENT_UTILS_SIGNAL_BITFIELD_H + +-#include <tr1/functional> ++#include <functional> + #include <torrent/common.h> + + namespace torrent { +@@ -45,7 +45,7 @@ namespace torrent { + class LIBTORRENT_EXPORT lt_cacheline_aligned signal_bitfield { + public: + typedef uint32_t bitfield_type; +- typedef std::tr1::function<void ()> slot_type; ++ typedef std::function<void ()> slot_type; + + static const unsigned int max_size = 32; + +--- src/torrent/utils/thread_base.h ++++ src/torrent/utils/thread_base.h +@@ -41,7 +41,7 @@ + #include <sys/types.h> + #include <torrent/common.h> + #include <torrent/utils/signal_bitfield.h> +-#include <tr1/functional> ++#include <functional> + + namespace torrent { + +@@ -50,8 +50,8 @@ class Poll; + class LIBTORRENT_EXPORT lt_cacheline_aligned thread_base { + public: + typedef void* (*pthread_func)(void*); +- typedef std::tr1::function<void ()> slot_void; +- typedef std::tr1::function<uint64_t ()> slot_timer; ++ typedef std::function<void ()> slot_void; ++ typedef std::function<uint64_t ()> slot_timer; + typedef class signal_bitfield signal_type; + + enum state_type { +--- src/tracker/tracker_http.cc ++++ src/tracker/tracker_http.cc +@@ -64,7 +64,6 @@ + #define LT_LOG_TRACKER_DUMP(log_level, log_dump_data, log_dump_size, log_fmt, ...) \ + lt_log_print_info_dump(LOG_TRACKER_##log_level, log_dump_data, log_dump_size, m_parent->info(), "tracker", "[%u] " log_fmt, group(), __VA_ARGS__); + +-namespace tr1 { using namespace std::tr1; } + + namespace torrent { + +@@ -74,8 +73,8 @@ TrackerHttp::TrackerHttp(TrackerList* parent, const std::string& url, int flags) + m_get(Http::slot_factory()()), + m_data(NULL) { + +- m_get->signal_done().push_back(tr1::bind(&TrackerHttp::receive_done, this)); +- m_get->signal_failed().push_back(tr1::bind(&TrackerHttp::receive_failed, this, tr1::placeholders::_1)); ++ m_get->signal_done().push_back(std::bind(&TrackerHttp::receive_done, this)); ++ m_get->signal_failed().push_back(std::bind(&TrackerHttp::receive_failed, this, std::placeholders::_1)); + + // Haven't considered if this needs any stronger error detection, + // can dropping the '?' be used for malicious purposes? +--- src/tracker/tracker_udp.cc ++++ src/tracker/tracker_udp.cc +@@ -55,7 +55,6 @@ + #include "tracker_udp.h" + #include "manager.h" + +-namespace tr1 { using namespace std::tr1; } + + #define LT_LOG_TRACKER(log_level, log_fmt, ...) \ + lt_log_print_info(LOG_TRACKER_##log_level, m_parent->info(), "tracker", "[%u] " log_fmt, group(), __VA_ARGS__); +@@ -72,7 +71,7 @@ TrackerUdp::TrackerUdp(TrackerList* parent, const std::string& url, int flags) : + m_readBuffer(NULL), + m_writeBuffer(NULL) { + +- m_taskTimeout.slot() = std::tr1::bind(&TrackerUdp::receive_timeout, this); ++ m_taskTimeout.slot() = std::bind(&TrackerUdp::receive_timeout, this); + } + + TrackerUdp::~TrackerUdp() { +@@ -110,10 +109,10 @@ TrackerUdp::send_state(int state) { + + m_sendState = state; + m_slot_resolver = manager->connection_manager()->resolver()(hostname, PF_INET, SOCK_DGRAM, +- tr1::bind(&TrackerUdp::start_announce, ++ std::bind(&TrackerUdp::start_announce, + this, +- tr1::placeholders::_1, +- tr1::placeholders::_2)); ++ std::placeholders::_1, ++ std::placeholders::_2)); + } + + void +--- test/data/chunk_list_test.cc ++++ test/data/chunk_list_test.cc +@@ -7,7 +7,6 @@ + + CPPUNIT_TEST_SUITE_REGISTRATION(ChunkListTest); + +-namespace tr1 { using namespace std::tr1; } + + torrent::Chunk* + func_create_chunk(uint32_t index, int prot_flags) { +--- test/data/chunk_list_test.h ++++ test/data/chunk_list_test.h +@@ -26,9 +26,9 @@ void func_storage_error(torrent::ChunkList* chunk_list, const std::st + torrent::ChunkManager* chunk_manager = new torrent::ChunkManager; \ + torrent::ChunkList* chunk_list = new torrent::ChunkList; \ + chunk_list->set_manager(chunk_manager); \ +- chunk_list->slot_create_chunk() = tr1::bind(&func_create_chunk, tr1::placeholders::_1, tr1::placeholders::_2); \ +- chunk_list->slot_free_diskspace() = tr1::bind(&func_free_diskspace, chunk_list); \ +- chunk_list->slot_storage_error() = tr1::bind(&func_storage_error, chunk_list, tr1::placeholders::_1); \ ++ chunk_list->slot_create_chunk() = std::bind(&func_create_chunk, std::placeholders::_1, std::placeholders::_2); \ ++ chunk_list->slot_free_diskspace() = std::bind(&func_free_diskspace, chunk_list); \ ++ chunk_list->slot_storage_error() = std::bind(&func_storage_error, chunk_list, std::placeholders::_1); \ + chunk_list->set_chunk_size(1 << 16); \ + chunk_list->resize(32); + +--- test/data/hash_check_queue_test.cc ++++ test/data/hash_check_queue_test.cc +@@ -1,7 +1,7 @@ + #include "config.h" + + #include <signal.h> +-#include <tr1/functional> ++#include <functional> + + #include "data/hash_queue_node.h" + #include "utils/sha1.h" +@@ -16,7 +16,6 @@ + + CPPUNIT_TEST_SUITE_REGISTRATION(HashCheckQueueTest); + +-namespace tr1 { using namespace std::tr1; } + + pthread_mutex_t done_chunks_lock = PTHREAD_MUTEX_INITIALIZER; + +@@ -71,7 +70,7 @@ static void do_nothing() {} + + void + HashCheckQueueTest::setUp() { +- torrent::Poll::slot_create_poll() = tr1::bind(&create_select_poll); ++ torrent::Poll::slot_create_poll() = std::bind(&create_select_poll); + + signal(SIGUSR1, (sig_t)&do_nothing); + } +@@ -90,7 +89,7 @@ HashCheckQueueTest::test_single() { + torrent::HashCheckQueue hash_queue; + + done_chunks_type done_chunks; +- hash_queue.slot_chunk_done() = tr1::bind(&chunk_done, &done_chunks, tr1::placeholders::_1, tr1::placeholders::_2); ++ hash_queue.slot_chunk_done() = std::bind(&chunk_done, &done_chunks, std::placeholders::_1, std::placeholders::_2); + + torrent::ChunkHandle handle_0 = chunk_list->get(0, torrent::ChunkList::get_blocking); + +@@ -117,7 +116,7 @@ HashCheckQueueTest::test_multiple() { + torrent::HashCheckQueue hash_queue; + + done_chunks_type done_chunks; +- hash_queue.slot_chunk_done() = tr1::bind(&chunk_done, &done_chunks, tr1::placeholders::_1, tr1::placeholders::_2); ++ hash_queue.slot_chunk_done() = std::bind(&chunk_done, &done_chunks, std::placeholders::_1, std::placeholders::_2); + + handle_list handles; + +@@ -150,7 +149,7 @@ HashCheckQueueTest::test_erase() { + // torrent::HashCheckQueue hash_queue; + + // done_chunks_type done_chunks; +- // hash_queue.slot_chunk_done() = tr1::bind(&chunk_done, &done_chunks, tr1::placeholders::_1, tr1::placeholders::_2); ++ // hash_queue.slot_chunk_done() = std::bind(&chunk_done, &done_chunks, std::placeholders::_1, std::placeholders::_2); + + // handle_list handles; + +@@ -186,7 +185,7 @@ HashCheckQueueTest::test_thread() { + torrent::HashCheckQueue* hash_queue = thread_disk->hash_queue(); + + done_chunks_type done_chunks; +- hash_queue->slot_chunk_done() = tr1::bind(&chunk_done, &done_chunks, tr1::placeholders::_1, tr1::placeholders::_2); ++ hash_queue->slot_chunk_done() = std::bind(&chunk_done, &done_chunks, std::placeholders::_1, std::placeholders::_2); + + for (int i = 0; i < 1000; i++) { + pthread_mutex_lock(&done_chunks_lock); +@@ -198,7 +197,7 @@ HashCheckQueueTest::test_thread() { + hash_queue->push_back(new torrent::HashChunk(handle_0)); + thread_disk->interrupt(); + +- CPPUNIT_ASSERT(wait_for_true(tr1::bind(&verify_hash, &done_chunks, 0, hash_for_index(0)))); ++ CPPUNIT_ASSERT(wait_for_true(std::bind(&verify_hash, &done_chunks, 0, hash_for_index(0)))); + chunk_list->release(&handle_0); + } + +--- test/data/hash_queue_test.cc ++++ test/data/hash_queue_test.cc +@@ -1,7 +1,7 @@ + #include "config.h" + + #include <signal.h> +-#include <tr1/functional> ++#include <functional> + + #include "data/hash_queue_node.h" + #include "torrent/chunk_manager.h" +@@ -18,7 +18,6 @@ + + CPPUNIT_TEST_SUITE_REGISTRATION(HashQueueTest); + +-namespace tr1 { using namespace std::tr1; } + + typedef std::map<int, torrent::HashString> done_chunks_type; + +@@ -44,7 +43,7 @@ void + HashQueueTest::setUp() { + CPPUNIT_ASSERT(torrent::taskScheduler.empty()); + +- torrent::Poll::slot_create_poll() = tr1::bind(&create_select_poll); ++ torrent::Poll::slot_create_poll() = std::bind(&create_select_poll); + signal(SIGUSR1, (sig_t)&do_nothing); + } + +@@ -82,10 +81,10 @@ HashQueueTest::test_single() { + + done_chunks_type done_chunks; + torrent::HashQueue* hash_queue = new torrent::HashQueue(thread_disk); +- hash_queue->slot_has_work() = tr1::bind(&fill_queue); ++ hash_queue->slot_has_work() = std::bind(&fill_queue); + + torrent::ChunkHandle handle_0 = chunk_list->get(0, torrent::ChunkList::get_blocking); +- hash_queue->push_back(handle_0, NULL, tr1::bind(&chunk_done, chunk_list, &done_chunks, tr1::placeholders::_1, tr1::placeholders::_2)); ++ hash_queue->push_back(handle_0, NULL, std::bind(&chunk_done, chunk_list, &done_chunks, std::placeholders::_1, std::placeholders::_2)); + + CPPUNIT_ASSERT(hash_queue->size() == 1); + CPPUNIT_ASSERT(hash_queue->front().handle().is_blocking()); +@@ -93,7 +92,7 @@ HashQueueTest::test_single() { + + hash_queue->work(); + +- CPPUNIT_ASSERT(wait_for_true(tr1::bind(&check_for_chunk_done, hash_queue, &done_chunks, 0))); ++ CPPUNIT_ASSERT(wait_for_true(std::bind(&check_for_chunk_done, hash_queue, &done_chunks, 0))); + CPPUNIT_ASSERT(done_chunks[0] == hash_for_index(0)); + + // chunk_list->release(&handle_0); +@@ -114,11 +113,11 @@ HashQueueTest::test_multiple() { + + done_chunks_type done_chunks; + torrent::HashQueue* hash_queue = new torrent::HashQueue(thread_disk); +- hash_queue->slot_has_work() = tr1::bind(&fill_queue); ++ hash_queue->slot_has_work() = std::bind(&fill_queue); + + for (unsigned int i = 0; i < 20; i++) { + hash_queue->push_back(chunk_list->get(i, torrent::ChunkList::get_blocking), +- NULL, tr1::bind(&chunk_done, chunk_list, &done_chunks, tr1::placeholders::_1, tr1::placeholders::_2)); ++ NULL, std::bind(&chunk_done, chunk_list, &done_chunks, std::placeholders::_1, std::placeholders::_2)); + + CPPUNIT_ASSERT(hash_queue->size() == i + 1); + CPPUNIT_ASSERT(hash_queue->back().handle().is_blocking()); +@@ -126,7 +125,7 @@ HashQueueTest::test_multiple() { + } + + for (unsigned int i = 0; i < 20; i++) { +- CPPUNIT_ASSERT(wait_for_true(tr1::bind(&check_for_chunk_done, hash_queue, &done_chunks, i))); ++ CPPUNIT_ASSERT(wait_for_true(std::bind(&check_for_chunk_done, hash_queue, &done_chunks, i))); + CPPUNIT_ASSERT(done_chunks[i] == hash_for_index(i)); + } + +@@ -144,13 +143,13 @@ HashQueueTest::test_erase() { + SETUP_THREAD(); + + torrent::HashQueue* hash_queue = new torrent::HashQueue(thread_disk); +- hash_queue->slot_has_work() = tr1::bind(&fill_queue); ++ hash_queue->slot_has_work() = std::bind(&fill_queue); + + done_chunks_type done_chunks; + + for (unsigned int i = 0; i < 20; i++) { + hash_queue->push_back(chunk_list->get(i, torrent::ChunkList::get_blocking), +- NULL, tr1::bind(&chunk_done, chunk_list, &done_chunks, tr1::placeholders::_1, tr1::placeholders::_2)); ++ NULL, std::bind(&chunk_done, chunk_list, &done_chunks, std::placeholders::_1, std::placeholders::_2)); + + CPPUNIT_ASSERT(hash_queue->size() == i + 1); + } +@@ -172,14 +171,14 @@ HashQueueTest::test_erase_stress() { + thread_disk->start_thread(); + + torrent::HashQueue* hash_queue = new torrent::HashQueue(thread_disk); +- hash_queue->slot_has_work() = tr1::bind(&fill_queue); ++ hash_queue->slot_has_work() = std::bind(&fill_queue); + + done_chunks_type done_chunks; + + for (unsigned int i = 0; i < 1000; i++) { + for (unsigned int i = 0; i < 20; i++) { + hash_queue->push_back(chunk_list->get(i, torrent::ChunkList::get_blocking), +- NULL, tr1::bind(&chunk_done, chunk_list, &done_chunks, tr1::placeholders::_1, tr1::placeholders::_2)); ++ NULL, std::bind(&chunk_done, chunk_list, &done_chunks, std::placeholders::_1, std::placeholders::_2)); + + CPPUNIT_ASSERT(hash_queue->size() == i + 1); + } +--- test/torrent/http_test.cc ++++ test/torrent/http_test.cc +@@ -18,8 +18,8 @@ CPPUNIT_TEST_SUITE_REGISTRATION(HttpTest); + int failed_counter = 0; \ + \ + http->set_stream(http_stream); \ +- http->signal_done().push_back(std::tr1::bind(&increment_value, &done_counter)); \ +- http->signal_failed().push_back(std::tr1::bind(&increment_value, &failed_counter)); ++ http->signal_done().push_back(std::bind(&increment_value, &done_counter)); \ ++ http->signal_failed().push_back(std::bind(&increment_value, &failed_counter)); + + class StringStream : public std::stringstream { + public: +@@ -73,7 +73,7 @@ static void increment_value(int* value) { (*value)++; } + + void + HttpTest::test_basic() { +- torrent::Http::slot_factory() = std::tr1::bind(&create_test_http); ++ torrent::Http::slot_factory() = std::bind(&create_test_http); + + torrent::Http* http = torrent::Http::slot_factory()(); + std::stringstream* http_stream = new std::stringstream; +--- test/torrent/tracker_controller_features.cc ++++ test/torrent/tracker_controller_features.cc +@@ -1,7 +1,7 @@ + #include "config.h" + + #include <iostream> +-#include <tr1/functional> ++#include <functional> + + #include "rak/priority_queue_default.h" + +@@ -9,7 +9,6 @@ + #include "tracker_list_test.h" + #include "tracker_controller_features.h" + +-namespace tr1 { using namespace std::tr1; } + + CPPUNIT_TEST_SUITE_REGISTRATION(tracker_controller_features); + +--- test/torrent/tracker_controller_requesting.cc ++++ test/torrent/tracker_controller_requesting.cc +@@ -1,7 +1,7 @@ + #include "config.h" + + #include <iostream> +-#include <tr1/functional> ++#include <functional> + + #include "rak/priority_queue_default.h" + +@@ -9,7 +9,6 @@ + #include "tracker_list_test.h" + #include "tracker_controller_requesting.h" + +-namespace tr1 { using namespace std::tr1; } + + CPPUNIT_TEST_SUITE_REGISTRATION(tracker_controller_requesting); + +--- test/torrent/tracker_controller_test.cc ++++ test/torrent/tracker_controller_test.cc +@@ -1,7 +1,7 @@ + #include "config.h" + + #include <iostream> +-#include <tr1/functional> ++#include <functional> + + #include "rak/priority_queue_default.h" + +@@ -9,7 +9,6 @@ + #include "tracker_list_test.h" + #include "tracker_controller_test.h" + +-namespace tr1 { using namespace std::tr1; } + + CPPUNIT_TEST_SUITE_REGISTRATION(tracker_controller_test); + +--- test/torrent/tracker_controller_test.h ++++ test/torrent/tracker_controller_test.h +@@ -78,16 +78,16 @@ public: + int enabled_counter = 0; \ + int disabled_counter = 0; \ + \ +- tracker_controller.slot_success() = tr1::bind(&increment_value, &success_counter); \ +- tracker_controller.slot_failure() = tr1::bind(&increment_value, &failure_counter); \ +- tracker_controller.slot_timeout() = tr1::bind(&increment_value, &timeout_counter); \ +- tracker_controller.slot_tracker_enabled() = tr1::bind(&increment_value, &enabled_counter); \ +- tracker_controller.slot_tracker_disabled() = tr1::bind(&increment_value, &disabled_counter); \ ++ tracker_controller.slot_success() = std::bind(&increment_value, &success_counter); \ ++ tracker_controller.slot_failure() = std::bind(&increment_value, &failure_counter); \ ++ tracker_controller.slot_timeout() = std::bind(&increment_value, &timeout_counter); \ ++ tracker_controller.slot_tracker_enabled() = std::bind(&increment_value, &enabled_counter); \ ++ tracker_controller.slot_tracker_disabled() = std::bind(&increment_value, &disabled_counter); \ + \ +- tracker_list.slot_success() = tr1::bind(&torrent::TrackerController::receive_success, &tracker_controller, tr1::placeholders::_1, tr1::placeholders::_2); \ +- tracker_list.slot_failure() = tr1::bind(&torrent::TrackerController::receive_failure, &tracker_controller, tr1::placeholders::_1, tr1::placeholders::_2); \ +- tracker_list.slot_tracker_enabled() = tr1::bind(&torrent::TrackerController::receive_tracker_enabled, &tracker_controller, tr1::placeholders::_1); \ +- tracker_list.slot_tracker_disabled() = tr1::bind(&torrent::TrackerController::receive_tracker_disabled, &tracker_controller, tr1::placeholders::_1); ++ tracker_list.slot_success() = std::bind(&torrent::TrackerController::receive_success, &tracker_controller, std::placeholders::_1, std::placeholders::_2); \ ++ tracker_list.slot_failure() = std::bind(&torrent::TrackerController::receive_failure, &tracker_controller, std::placeholders::_1, std::placeholders::_2); \ ++ tracker_list.slot_tracker_enabled() = std::bind(&torrent::TrackerController::receive_tracker_enabled, &tracker_controller, std::placeholders::_1); \ ++ tracker_list.slot_tracker_disabled() = std::bind(&torrent::TrackerController::receive_tracker_disabled, &tracker_controller, std::placeholders::_1); + + #define TEST_SINGLE_BEGIN() \ + TRACKER_CONTROLLER_SETUP(); \ +--- test/torrent/tracker_list_features_test.cc ++++ test/torrent/tracker_list_features_test.cc +@@ -1,6 +1,6 @@ + #include "config.h" + +-#include <tr1/functional> ++#include <functional> + + #include "torrent/http.h" + #include "net/address_list.h" +@@ -9,7 +9,6 @@ + #include "tracker_list_test.h" + #include "tracker_list_features_test.h" + +-namespace tr1 { using namespace std::tr1; } + + CPPUNIT_TEST_SUITE_REGISTRATION(tracker_list_features_test); + +@@ -182,7 +181,7 @@ tracker_list_features_test::test_count_active() { + + + bool +-verify_did_internal_error(tr1::function<void ()> func, bool should_throw) { ++verify_did_internal_error(std::function<void ()> func, bool should_throw) { + bool did_throw = false; + + try { +@@ -203,28 +202,28 @@ tracker_list_features_test::test_request_safeguard() { + TRACKER_INSERT(0, tracker_foo); + + for (unsigned int i = 0; i < 9; i++) { +- CPPUNIT_ASSERT(verify_did_internal_error(tr1::bind(&torrent::TrackerList::send_state, &tracker_list, tracker_1, 1), false)); ++ CPPUNIT_ASSERT(verify_did_internal_error(std::bind(&torrent::TrackerList::send_state, &tracker_list, tracker_1, 1), false)); + CPPUNIT_ASSERT(tracker_1->trigger_success()); + CPPUNIT_ASSERT(tracker_1->success_counter() == (i + 1)); + } + +- CPPUNIT_ASSERT(verify_did_internal_error(tr1::bind(&torrent::TrackerList::send_state, &tracker_list, tracker_1, 1), true)); ++ CPPUNIT_ASSERT(verify_did_internal_error(std::bind(&torrent::TrackerList::send_state, &tracker_list, tracker_1, 1), true)); + CPPUNIT_ASSERT(tracker_1->trigger_success()); + + torrent::cachedTime += rak::timer::from_seconds(1000); + + for (unsigned int i = 0; i < 9; i++) { +- CPPUNIT_ASSERT(verify_did_internal_error(tr1::bind(&torrent::TrackerList::send_state, &tracker_list, tracker_foo, 1), false)); ++ CPPUNIT_ASSERT(verify_did_internal_error(std::bind(&torrent::TrackerList::send_state, &tracker_list, tracker_foo, 1), false)); + CPPUNIT_ASSERT(tracker_foo->trigger_success()); + CPPUNIT_ASSERT(tracker_foo->success_counter() == (i + 1)); + CPPUNIT_ASSERT(tracker_foo->is_usable()); + } + +- CPPUNIT_ASSERT(verify_did_internal_error(tr1::bind(&torrent::TrackerList::send_state, &tracker_list, tracker_foo, 1), true)); ++ CPPUNIT_ASSERT(verify_did_internal_error(std::bind(&torrent::TrackerList::send_state, &tracker_list, tracker_foo, 1), true)); + CPPUNIT_ASSERT(tracker_foo->trigger_success()); + + for (unsigned int i = 0; i < 40; i++) { +- CPPUNIT_ASSERT(verify_did_internal_error(tr1::bind(&torrent::TrackerList::send_state, &tracker_list, tracker_2, 1), false)); ++ CPPUNIT_ASSERT(verify_did_internal_error(std::bind(&torrent::TrackerList::send_state, &tracker_list, tracker_2, 1), false)); + CPPUNIT_ASSERT(tracker_2->trigger_success()); + CPPUNIT_ASSERT(tracker_2->success_counter() == (i + 1)); + +@@ -232,7 +231,7 @@ tracker_list_features_test::test_request_safeguard() { + } + + for (unsigned int i = 0; i < 17; i++) { +- CPPUNIT_ASSERT(verify_did_internal_error(tr1::bind(&torrent::TrackerList::send_state, &tracker_list, tracker_3, 1), false)); ++ CPPUNIT_ASSERT(verify_did_internal_error(std::bind(&torrent::TrackerList::send_state, &tracker_list, tracker_3, 1), false)); + CPPUNIT_ASSERT(tracker_3->trigger_success()); + CPPUNIT_ASSERT(tracker_3->success_counter() == (i + 1)); + +@@ -240,6 +239,6 @@ tracker_list_features_test::test_request_safeguard() { + torrent::cachedTime += rak::timer::from_seconds(1); + } + +- CPPUNIT_ASSERT(verify_did_internal_error(tr1::bind(&torrent::TrackerList::send_state, &tracker_list, tracker_3, 1), true)); ++ CPPUNIT_ASSERT(verify_did_internal_error(std::bind(&torrent::TrackerList::send_state, &tracker_list, tracker_3, 1), true)); + CPPUNIT_ASSERT(tracker_3->trigger_success()); + } +--- test/torrent/tracker_list_test.cc ++++ test/torrent/tracker_list_test.cc +@@ -6,7 +6,6 @@ + #include "globals.h" + #include "tracker_list_test.h" + +-namespace tr1 { using namespace std::tr1; } + + CPPUNIT_TEST_SUITE_REGISTRATION(tracker_list_test); + +@@ -101,8 +100,8 @@ tracker_list_test::test_enable() { + int enabled_counter = 0; + int disabled_counter = 0; + +- tracker_list.slot_tracker_enabled() = tr1::bind(&increment_value, &enabled_counter); +- tracker_list.slot_tracker_disabled() = tr1::bind(&increment_value, &disabled_counter); ++ tracker_list.slot_tracker_enabled() = std::bind(&increment_value, &enabled_counter); ++ tracker_list.slot_tracker_disabled() = std::bind(&increment_value, &disabled_counter); + + TRACKER_INSERT(0, tracker_0); + TRACKER_INSERT(1, tracker_1); +@@ -208,7 +207,7 @@ tracker_list_test::test_find_url() { + void + tracker_list_test::test_can_scrape() { + TRACKER_SETUP(); +- torrent::Http::slot_factory() = std::tr1::bind(&http_factory); ++ torrent::Http::slot_factory() = std::bind(&http_factory); + + tracker_list.insert_url(0, "http://example.com/announce"); + CPPUNIT_ASSERT((tracker_list.back()->flags() & torrent::Tracker::flag_can_scrape)); +--- test/torrent/tracker_list_test.h ++++ test/torrent/tracker_list_test.h +@@ -107,10 +107,10 @@ bool check_has_active_in_group(const torrent::TrackerList* tracker_list, const c + int failure_counter = 0; \ + int scrape_success_counter = 0; \ + int scrape_failure_counter = 0; \ +- tracker_list.slot_success() = tr1::bind(&increment_value, &success_counter); \ +- tracker_list.slot_failure() = tr1::bind(&increment_value, &failure_counter); \ +- tracker_list.slot_scrape_success() = tr1::bind(&increment_value, &scrape_success_counter); \ +- tracker_list.slot_scrape_failure() = tr1::bind(&increment_value, &scrape_failure_counter); ++ tracker_list.slot_success() = std::bind(&increment_value, &success_counter); \ ++ tracker_list.slot_failure() = std::bind(&increment_value, &failure_counter); \ ++ tracker_list.slot_scrape_success() = std::bind(&increment_value, &scrape_success_counter); \ ++ tracker_list.slot_scrape_failure() = std::bind(&increment_value, &scrape_failure_counter); + + #define TRACKER_INSERT(group, name) \ + TrackerTest* name = new TrackerTest(&tracker_list, ""); \ +--- test/torrent/tracker_timeout_test.cc ++++ test/torrent/tracker_timeout_test.cc +@@ -9,7 +9,6 @@ + #include "tracker_list_test.h" + #include "tracker_timeout_test.h" + +-namespace tr1 { using namespace std::tr1; } + + CPPUNIT_TEST_SUITE_REGISTRATION(tracker_timeout_test); + +--- test/torrent/utils/log_buffer_test.cc ++++ test/torrent/utils/log_buffer_test.cc +@@ -7,7 +7,6 @@ + + CPPUNIT_TEST_SUITE_REGISTRATION(utils_log_buffer_test); + +-namespace tr1 { using namespace std::tr1; } + + void + utils_log_buffer_test::setUp() { +--- test/torrent/utils/log_test.cc ++++ test/torrent/utils/log_test.cc +@@ -4,7 +4,7 @@ + #include <cstring> + #include <fstream> + #include <iostream> +-#include <tr1/functional> ++#include <functional> + #include <torrent/exceptions.h> + #include <torrent/utils/log.h> + +@@ -12,7 +12,6 @@ + + CPPUNIT_TEST_SUITE_REGISTRATION(utils_log_test); + +-namespace tr1 { using namespace std::tr1; } + + const char* expected_output = NULL; + unsigned int output_mask; +@@ -47,12 +46,12 @@ utils_log_test::test_basic() { + CPPUNIT_ASSERT(torrent::log_groups.size() == torrent::LOG_GROUP_MAX_SIZE); + + CPPUNIT_ASSERT(std::find_if(torrent::log_groups.begin(), torrent::log_groups.end(), +- tr1::bind(&torrent::log_group::valid, tr1::placeholders::_1)) == torrent::log_groups.end()); ++ std::bind(&torrent::log_group::valid, std::placeholders::_1)) == torrent::log_groups.end()); + } + + inline void + open_output(const char* name, int mask = 0) { +- torrent::log_open_output(name, tr1::bind(&::test_output, tr1::placeholders::_1, tr1::placeholders::_2, mask)); ++ torrent::log_open_output(name, std::bind(&::test_output, std::placeholders::_1, std::placeholders::_2, mask)); + } + + void +--- test/torrent/utils/net_test.cc ++++ test/torrent/utils/net_test.cc +@@ -7,13 +7,12 @@ + + CPPUNIT_TEST_SUITE_REGISTRATION(utils_net_test); + +-namespace tr1 { using namespace std::tr1; } + + static void inc_value(int* value) { (*value)++; } + + #define LTUNIT_AI_CALL(lt_ai, lt_flags) { \ + int test_value = 0; \ +- CPPUNIT_ASSERT(torrent::address_info_call(ai, 0, tr1::bind(&inc_value, &test_value))); \ ++ CPPUNIT_ASSERT(torrent::address_info_call(ai, 0, std::bind(&inc_value, &test_value))); \ + CPPUNIT_ASSERT(test_value); } \ + + void +--- test/torrent/utils/option_strings_test.cc ++++ test/torrent/utils/option_strings_test.cc +@@ -2,7 +2,7 @@ + + #include <fstream> + #include <iostream> +-#include <tr1/functional> ++#include <functional> + #include <torrent/exceptions.h> + #include <torrent/utils/option_strings.h> + +@@ -17,7 +17,6 @@ + + CPPUNIT_TEST_SUITE_REGISTRATION(option_strings_test); + +-namespace tr1 { using namespace std::tr1; } + + void + option_strings_test::test_basic() { +--- test/torrent/utils/signal_bitfield_test.cc ++++ test/torrent/utils/signal_bitfield_test.cc +@@ -9,7 +9,6 @@ + + CPPUNIT_TEST_SUITE_REGISTRATION(utils_signal_bitfield_test); + +-namespace tr1 { using namespace std::tr1; } + + static void + mark_index(uint32_t* bitfield, unsigned int index) { +@@ -32,7 +31,7 @@ utils_signal_bitfield_test::tearDown() { + } + + static bool +-verify_did_internal_error(tr1::function<void ()> func, bool should_throw) { ++verify_did_internal_error(std::function<void ()> func, bool should_throw) { + bool did_throw = false; + + try { +@@ -50,7 +49,7 @@ verify_did_internal_error(tr1::function<void ()> func, bool should_throw) { + + + #define SIGNAL_BITFIELD_DID_INTERNAL_ERROR(verify_slot, did_throw) \ +- CPPUNIT_ASSERT(verify_did_internal_error(tr1::bind(&torrent::signal_bitfield::add_signal, \ ++ CPPUNIT_ASSERT(verify_did_internal_error(std::bind(&torrent::signal_bitfield::add_signal, \ + &signal_bitfield, \ + torrent::signal_bitfield::slot_type(verify_slot)), \ + did_throw)); +@@ -64,16 +63,16 @@ utils_signal_bitfield_test::test_basic() { + SIGNAL_BITFIELD_DID_INTERNAL_ERROR(torrent::signal_bitfield::slot_type(), true); + + for (unsigned int i = 0; i < torrent::signal_bitfield::max_size; i++) +- CPPUNIT_ASSERT(signal_bitfield.add_signal(tr1::bind(&mark_index, &marked_bitfield, i)) == i); ++ CPPUNIT_ASSERT(signal_bitfield.add_signal(std::bind(&mark_index, &marked_bitfield, i)) == i); + +- SIGNAL_BITFIELD_DID_INTERNAL_ERROR(tr1::bind(&mark_index, &marked_bitfield, torrent::signal_bitfield::max_size), true); ++ SIGNAL_BITFIELD_DID_INTERNAL_ERROR(std::bind(&mark_index, &marked_bitfield, torrent::signal_bitfield::max_size), true); + } + + void + utils_signal_bitfield_test::test_single() { + SETUP_SIGNAL_BITFIELD(); + +- CPPUNIT_ASSERT(signal_bitfield.add_signal(tr1::bind(&mark_index, &marked_bitfield, 0)) == 0); ++ CPPUNIT_ASSERT(signal_bitfield.add_signal(std::bind(&mark_index, &marked_bitfield, 0)) == 0); + + signal_bitfield.signal(0); + CPPUNIT_ASSERT(marked_bitfield == 0x0); +@@ -92,7 +91,7 @@ utils_signal_bitfield_test::test_multiple() { + SETUP_SIGNAL_BITFIELD(); + + for (unsigned int i = 0; i < torrent::signal_bitfield::max_size; i++) +- CPPUNIT_ASSERT(signal_bitfield.add_signal(tr1::bind(&mark_index, &marked_bitfield, i)) == i); ++ CPPUNIT_ASSERT(signal_bitfield.add_signal(std::bind(&mark_index, &marked_bitfield, i)) == i); + + signal_bitfield.signal(2); + signal_bitfield.signal(31); +@@ -114,7 +113,7 @@ utils_signal_bitfield_test::test_thread() { + // thread->set_test_flag(thread_test::test_flag_long_timeout); + + for (unsigned int i = 0; i < torrent::signal_bitfield::max_size; i++) +- CPPUNIT_ASSERT(thread->signal_bitfield()->add_signal(tr1::bind(&mark_index, &marked_bitfield, i)) == i); ++ CPPUNIT_ASSERT(thread->signal_bitfield()->add_signal(std::bind(&mark_index, &marked_bitfield, i)) == i); + + thread->init_thread(); + thread->start_thread(); +@@ -128,12 +127,12 @@ utils_signal_bitfield_test::test_thread() { + thread->signal_bitfield()->signal(i % 20); + // thread->interrupt(); + +- CPPUNIT_ASSERT(wait_for_true(tr1::bind(&check_index, &marked_bitfield, i % 20))); ++ CPPUNIT_ASSERT(wait_for_true(std::bind(&check_index, &marked_bitfield, i % 20))); + __sync_fetch_and_and(&marked_bitfield, ~uint32_t()); + } + + thread->stop_thread(); +- CPPUNIT_ASSERT(wait_for_true(tr1::bind(&thread_test::is_state, thread, thread_test::STATE_INACTIVE))); ++ CPPUNIT_ASSERT(wait_for_true(std::bind(&thread_test::is_state, thread, thread_test::STATE_INACTIVE))); + + delete thread; + } +--- test/torrent/utils/thread_base_test.cc ++++ test/torrent/utils/thread_base_test.cc +@@ -1,7 +1,7 @@ + #include "config.h" + + #include <unistd.h> +-#include <tr1/functional> ++#include <functional> + #include <torrent/exceptions.h> + #include <torrent/poll_select.h> + #include <torrent/utils/thread_base.h> +@@ -10,7 +10,6 @@ + + CPPUNIT_TEST_SUITE_REGISTRATION(utils_thread_base_test); + +-namespace tr1 { using namespace std::tr1; } + + void throw_shutdown_exception() { throw torrent::shutdown_exception(); } + +@@ -58,7 +57,7 @@ thread_test::call_events() { + } + + bool +-wait_for_true(std::tr1::function<bool ()> test_function) { ++wait_for_true(std::function<bool ()> test_function) { + int i = 100; + + do { +@@ -108,15 +107,15 @@ utils_thread_base_test::test_lifecycle() { + CPPUNIT_ASSERT(thread->test_state() == thread_test::TEST_PRE_START); + + thread->set_pre_stop(); +- CPPUNIT_ASSERT(!wait_for_true(tr1::bind(&thread_test::is_test_state, thread, thread_test::TEST_PRE_STOP))); ++ CPPUNIT_ASSERT(!wait_for_true(std::bind(&thread_test::is_test_state, thread, thread_test::TEST_PRE_STOP))); + + thread->start_thread(); +- CPPUNIT_ASSERT(wait_for_true(tr1::bind(&thread_test::is_state, thread, thread_test::STATE_ACTIVE))); ++ CPPUNIT_ASSERT(wait_for_true(std::bind(&thread_test::is_state, thread, thread_test::STATE_ACTIVE))); + CPPUNIT_ASSERT(thread->is_active()); +- CPPUNIT_ASSERT(wait_for_true(tr1::bind(&thread_test::is_test_state, thread, thread_test::TEST_PRE_STOP))); ++ CPPUNIT_ASSERT(wait_for_true(std::bind(&thread_test::is_test_state, thread, thread_test::TEST_PRE_STOP))); + + thread->stop_thread(); +- CPPUNIT_ASSERT(wait_for_true(tr1::bind(&thread_test::is_state, thread, thread_test::STATE_INACTIVE))); ++ CPPUNIT_ASSERT(wait_for_true(std::bind(&thread_test::is_state, thread, thread_test::STATE_INACTIVE))); + CPPUNIT_ASSERT(thread->is_inactive()); + + delete thread; +@@ -144,10 +143,10 @@ utils_thread_base_test::test_global_lock_basic() { + CPPUNIT_ASSERT(!torrent::thread_base::trylock_global_lock()); + + thread->set_acquire_global(); +- CPPUNIT_ASSERT(!wait_for_true(tr1::bind(&thread_test::is_test_flags, thread, thread_test::test_flag_has_global))); ++ CPPUNIT_ASSERT(!wait_for_true(std::bind(&thread_test::is_test_flags, thread, thread_test::test_flag_has_global))); + + torrent::thread_base::release_global_lock(); +- CPPUNIT_ASSERT(wait_for_true(tr1::bind(&thread_test::is_test_flags, thread, thread_test::test_flag_has_global))); ++ CPPUNIT_ASSERT(wait_for_true(std::bind(&thread_test::is_test_flags, thread, thread_test::test_flag_has_global))); + + CPPUNIT_ASSERT(!torrent::thread_base::trylock_global_lock()); + torrent::thread_base::release_global_lock(); +@@ -159,7 +158,7 @@ utils_thread_base_test::test_global_lock_basic() { + + torrent::thread_base::release_global_lock(); + thread->stop_thread(); +- CPPUNIT_ASSERT(wait_for_true(tr1::bind(&thread_test::is_state, thread, thread_test::STATE_INACTIVE))); ++ CPPUNIT_ASSERT(wait_for_true(std::bind(&thread_test::is_state, thread, thread_test::STATE_INACTIVE))); + + delete thread; + } +@@ -182,11 +181,11 @@ utils_thread_base_test::test_interrupt() { + thread->interrupt(); + + // Wait for flag to clear. +- CPPUNIT_ASSERT(wait_for_true(tr1::bind(&thread_test::is_not_test_flags, thread, thread_test::test_flag_do_work))); ++ CPPUNIT_ASSERT(wait_for_true(std::bind(&thread_test::is_not_test_flags, thread, thread_test::test_flag_do_work))); + } + + thread->stop_thread(); +- CPPUNIT_ASSERT(wait_for_true(tr1::bind(&thread_test::is_state, thread, thread_test::STATE_INACTIVE))); ++ CPPUNIT_ASSERT(wait_for_true(std::bind(&thread_test::is_state, thread, thread_test::STATE_INACTIVE))); + + delete thread; + } +--- test/torrent/utils/thread_base_test.h ++++ test/torrent/utils/thread_base_test.h +@@ -35,10 +35,10 @@ struct thread_management_type { + thread_disk->init_thread(); + + #define CLEANUP_THREAD() \ +- CPPUNIT_ASSERT(wait_for_true(tr1::bind(&torrent::thread_base::is_inactive, thread_disk))); \ ++ CPPUNIT_ASSERT(wait_for_true(std::bind(&torrent::thread_base::is_inactive, thread_disk))); \ + delete thread_disk; + +-bool wait_for_true(std::tr1::function<bool ()> test_function); ++bool wait_for_true(std::function<bool ()> test_function); + + class thread_test : public torrent::thread_base { + public: +--- src/torrent/utils/extents.h ++++ src/torrent/utils/extents.h +@@ -51,9 +51,9 @@ struct extents_base { + typedef std::array<mapped_type, TableSize> table_type; + + extents_base(key_type pos, unsigned int mb, mapped_value_type val) : +- mask_bits(mb), position(pos) { table.assign(mapped_type(NULL, mapped_value_type())); } ++ mask_bits(mb), position(pos) { table.fill(mapped_type(NULL, mapped_value_type())); } + extents_base(extents_base* parent, typename table_type::const_iterator itr) : +- mask_bits(parent->mask_bits - TableBits), position(parent->partition_pos(itr)) { table.assign(mapped_type(NULL, itr->second)); } ++ mask_bits(parent->mask_bits - TableBits), position(parent->partition_pos(itr)) { table.fill(mapped_type(NULL, itr->second)); } + ~extents_base(); + + bool is_divisible(key_type key) const { return key % mask_bits == 0; } +--- src/torrent/utils/log.cc ++++ src/torrent/utils/log.cc +@@ -237,7 +237,7 @@ void + log_cleanup() { + pthread_mutex_lock(&log_mutex); + +- log_groups.assign(log_group()); ++ log_groups.fill(log_group()); + log_outputs.clear(); + log_children.clear(); + +--- src/torrent/connection_manager.h ++++ src/torrent/connection_manager.h +@@ -1,3 +1,4 @@ ++#include <sys/types.h> + // libTorrent - BitTorrent library + // Copyright (C) 2005-2011, Jari Sundell + // +--- src/torrent/utils/option_strings.cc ++++ src/torrent/utils/option_strings.cc +@@ -1,3 +1,4 @@ ++#include <sys/types.h> + // libTorrent - BitTorrent library + // Copyright (C) 2005-2011, Jari Sundell + // +--- src/net/socket_set.h ++++ src/net/socket_set.h +@@ -53,12 +53,12 @@ namespace torrent { + + // Propably should rename to EventSet... + +-class SocketSet : private std::vector<Event*, rak::cacheline_allocator<> > { ++class SocketSet : private std::vector<Event*, rak::cacheline_allocator<Event*> > { + public: + typedef uint32_t size_type; + +- typedef std::vector<Event*, rak::cacheline_allocator<> > base_type; +- typedef std::vector<size_type, rak::cacheline_allocator<> > Table; ++ typedef std::vector<Event*, rak::cacheline_allocator<Event*> > base_type; ++ typedef std::vector<size_type, rak::cacheline_allocator<size_type> > Table; + + static const size_type npos = static_cast<size_type>(-1); + +--- src/torrent/utils/log.cc ++++ src/torrent/utils/log.cc +@@ -175,7 +175,7 @@ log_group::internal_print(const HashString* hash, const char* subsystem, const v + pthread_mutex_lock(&log_mutex); + std::for_each(m_first, m_last, std::bind(&log_slot::operator(), + std::placeholders::_1, +- buffer, ++ (const char*)buffer, + std::distance(buffer, first), + std::distance(log_groups.begin(), this))); + if (dump_data != NULL) Property changes on: files/extra-patch-fix-clang-build.diff ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20131230145215.E5B2C2800>