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_stream(s);
h->set_timeout(5 * 60); 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_done().push_back(std::tr1::bind(&HttpQueue::erase, this, signal_itr));
h->signal_failed().push_back(std::tr1::bind(&HttpQueue::erase, this, itr)); h->signal_failed().push_back(std::tr1::bind(&HttpQueue::erase, this, signal_itr));
(*itr)->start(); (*signal_itr)->start();
h.release(); 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 void
HttpQueue::erase(iterator itr) { HttpQueue::erase(iterator signal_itr) {
m_signalErase.emit(*itr); for (signal_curl_get::iterator itr = m_signal_erase.begin(), last = m_signal_erase.end(); itr != last; itr++)
(*itr)(*signal_itr);
delete *itr; delete *signal_itr;
Base::erase(itr); base_type::erase(signal_itr);
} }
void void
@@ -80,7 +83,7 @@ HttpQueue::clear() {
while (!empty()) while (!empty())
erase(begin()); erase(begin());
Base::clear(); base_type::clear();
} }
} }
+20 -20
View File
@@ -39,7 +39,6 @@
#include <list> #include <list>
#include <iosfwd> #include <iosfwd>
#include <sigc++/signal.h>
#include <tr1/functional> #include <tr1/functional>
namespace core { namespace core {
@@ -48,22 +47,23 @@ class CurlGet;
class HttpQueue : private std::list<CurlGet*> { class HttpQueue : private std::list<CurlGet*> {
public: public:
typedef std::list<CurlGet*> Base; typedef std::list<CurlGet*> base_type;
typedef sigc::signal1<void, CurlGet*> SignalHttp; typedef std::tr1::function<CurlGet* ()> slot_factory;
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_type::iterator;
using Base::const_iterator; using base_type::const_iterator;
using Base::reverse_iterator; using base_type::reverse_iterator;
using Base::const_reverse_iterator; using base_type::const_reverse_iterator;
using Base::begin; using base_type::begin;
using Base::end; using base_type::end;
using Base::rbegin; using base_type::rbegin;
using Base::rend; using base_type::rend;
using Base::empty; using base_type::empty;
using Base::size; using base_type::size;
HttpQueue() {} HttpQueue() {}
~HttpQueue() { clear(); } ~HttpQueue() { clear(); }
@@ -78,15 +78,15 @@ public:
void clear(); 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; } signal_curl_get& signal_insert() { return m_signal_insert; }
SignalHttp& signal_erase() { return m_signalErase; } signal_curl_get& signal_erase() { return m_signal_erase; }
private: private:
slot_factory m_slot_factory; slot_factory m_slot_factory;
SignalHttp m_signalInsert; signal_curl_get m_signal_insert;
SignalHttp m_signalErase; signal_curl_get m_signal_erase;
}; };
} }
+8 -2
View File
@@ -52,8 +52,14 @@ WindowHttpQueue::WindowHttpQueue(core::HttpQueue* q) :
m_queue(q) { m_queue(q) {
set_active(false); set_active(false);
m_connInsert = m_queue->signal_insert().connect(sigc::mem_fun(*this, &WindowHttpQueue::receive_insert)); m_connInsert = m_queue->signal_insert().insert(m_queue->signal_insert().end(),
m_connErase = m_queue->signal_erase().connect(sigc::mem_fun(*this, &WindowHttpQueue::receive_erase)); 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 void
+7 -5
View File
@@ -37,7 +37,7 @@
#ifndef RTORRENT_DISPLAY_WINDOW_HTTP_QUEUE_H #ifndef RTORRENT_DISPLAY_WINDOW_HTTP_QUEUE_H
#define RTORRENT_DISPLAY_WINDOW_HTTP_QUEUE_H #define RTORRENT_DISPLAY_WINDOW_HTTP_QUEUE_H
#include <sigc++/connection.h> #include <tr1/functional>
#include "window.h" #include "window.h"
@@ -50,8 +50,10 @@ namespace display {
class WindowHttpQueue : public Window { class WindowHttpQueue : public Window {
public: 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(core::HttpQueue* q);
~WindowHttpQueue() { m_connInsert.disconnect(); m_connErase.disconnect(); }
virtual void redraw(); virtual void redraw();
@@ -76,10 +78,10 @@ private:
static std::string create_name(core::CurlGet* h); static std::string create_name(core::CurlGet* h);
core::HttpQueue* m_queue; core::HttpQueue* m_queue;
sigc::connection m_connInsert;
sigc::connection m_connErase;
Container m_container; Container m_container;
signal_curl_get::iterator m_connInsert;
signal_curl_get::iterator m_connErase;
}; };
} }