Converted sigc::signals to STL.

This commit is contained in:
rakshasa
2013-08-26 23:15:33 +09:00
parent 529eda5aab
commit aa2f784ae6
4 changed files with 49 additions and 38 deletions
+14 -11
View File
@@ -54,25 +54,28 @@ HttpQueue::insert(const std::string& url, std::iostream* s) {
h->set_stream(s);
h->set_timeout(5 * 60);
iterator itr = Base::insert(end(), h.get());
iterator signal_itr = base_type::insert(end(), h.get());
h->signal_done().push_back(std::tr1::bind(&HttpQueue::erase, this, itr));
h->signal_failed().push_back(std::tr1::bind(&HttpQueue::erase, this, itr));
h->signal_done().push_back(std::tr1::bind(&HttpQueue::erase, this, signal_itr));
h->signal_failed().push_back(std::tr1::bind(&HttpQueue::erase, this, signal_itr));
(*itr)->start();
(*signal_itr)->start();
h.release();
m_signalInsert.emit(*itr);
return itr;
for (signal_curl_get::iterator itr = m_signal_insert.begin(), last = m_signal_insert.end(); itr != last; itr++)
(*itr)(*signal_itr);
return signal_itr;
}
void
HttpQueue::erase(iterator itr) {
m_signalErase.emit(*itr);
HttpQueue::erase(iterator signal_itr) {
for (signal_curl_get::iterator itr = m_signal_erase.begin(), last = m_signal_erase.end(); itr != last; itr++)
(*itr)(*signal_itr);
delete *itr;
Base::erase(itr);
delete *signal_itr;
base_type::erase(signal_itr);
}
void
@@ -80,7 +83,7 @@ HttpQueue::clear() {
while (!empty())
erase(begin());
Base::clear();
base_type::clear();
}
}
+20 -20
View File
@@ -39,7 +39,6 @@
#include <list>
#include <iosfwd>
#include <sigc++/signal.h>
#include <tr1/functional>
namespace core {
@@ -48,22 +47,23 @@ class CurlGet;
class HttpQueue : private std::list<CurlGet*> {
public:
typedef std::list<CurlGet*> Base;
typedef sigc::signal1<void, CurlGet*> SignalHttp;
typedef std::tr1::function<CurlGet* ()> slot_factory;
typedef std::list<CurlGet*> base_type;
typedef std::tr1::function<CurlGet* ()> slot_factory;
typedef std::tr1::function<void (CurlGet*)> slot_curl_get;
typedef std::list<slot_curl_get> signal_curl_get;
using Base::iterator;
using Base::const_iterator;
using Base::reverse_iterator;
using Base::const_reverse_iterator;
using base_type::iterator;
using base_type::const_iterator;
using base_type::reverse_iterator;
using base_type::const_reverse_iterator;
using Base::begin;
using Base::end;
using Base::rbegin;
using Base::rend;
using base_type::begin;
using base_type::end;
using base_type::rbegin;
using base_type::rend;
using Base::empty;
using Base::size;
using base_type::empty;
using base_type::size;
HttpQueue() {}
~HttpQueue() { clear(); }
@@ -78,15 +78,15 @@ public:
void clear();
void set_slot_factory(slot_factory s) { m_slot_factory = s; }
void set_slot_factory(slot_factory s) { m_slot_factory = s; }
SignalHttp& signal_insert() { return m_signalInsert; }
SignalHttp& signal_erase() { return m_signalErase; }
signal_curl_get& signal_insert() { return m_signal_insert; }
signal_curl_get& signal_erase() { return m_signal_erase; }
private:
slot_factory m_slot_factory;
SignalHttp m_signalInsert;
SignalHttp m_signalErase;
slot_factory m_slot_factory;
signal_curl_get m_signal_insert;
signal_curl_get m_signal_erase;
};
}
+8 -2
View File
@@ -52,8 +52,14 @@ WindowHttpQueue::WindowHttpQueue(core::HttpQueue* q) :
m_queue(q) {
set_active(false);
m_connInsert = m_queue->signal_insert().connect(sigc::mem_fun(*this, &WindowHttpQueue::receive_insert));
m_connErase = m_queue->signal_erase().connect(sigc::mem_fun(*this, &WindowHttpQueue::receive_erase));
m_connInsert = m_queue->signal_insert().insert(m_queue->signal_insert().end(),
std::tr1::bind(&WindowHttpQueue::receive_insert,
this,
std::tr1::placeholders::_1));
m_connErase = m_queue->signal_erase().insert(m_queue->signal_insert().end(),
std::tr1::bind(&WindowHttpQueue::receive_erase,
this,
std::tr1::placeholders::_1));
}
void
+7 -5
View File
@@ -37,7 +37,7 @@
#ifndef RTORRENT_DISPLAY_WINDOW_HTTP_QUEUE_H
#define RTORRENT_DISPLAY_WINDOW_HTTP_QUEUE_H
#include <sigc++/connection.h>
#include <tr1/functional>
#include "window.h"
@@ -50,8 +50,10 @@ namespace display {
class WindowHttpQueue : public Window {
public:
typedef std::tr1::function<void (core::CurlGet*)> slot_curl_get;
typedef std::list<slot_curl_get> signal_curl_get;
WindowHttpQueue(core::HttpQueue* q);
~WindowHttpQueue() { m_connInsert.disconnect(); m_connErase.disconnect(); }
virtual void redraw();
@@ -76,10 +78,10 @@ private:
static std::string create_name(core::CurlGet* h);
core::HttpQueue* m_queue;
sigc::connection m_connInsert;
sigc::connection m_connErase;
Container m_container;
signal_curl_get::iterator m_connInsert;
signal_curl_get::iterator m_connErase;
};
}