Move signal into namespace util

signal will clash with the POSIX signal function. This tends to be too
annoying to work around with careful inclusion orders or other
namespacing.
This commit is contained in:
Danny Robson 2011-07-16 14:47:56 +10:00
parent 64448e7e5e
commit d6b943500c
2 changed files with 41 additions and 40 deletions

View File

@ -21,4 +21,4 @@
#include "signal.hpp"
// Instance something probably useful here so that we generate early compile/link errors.
template class signal <void>;
template class util::signal <void>;

View File

@ -24,53 +24,54 @@
#include <vector>
#include <functional>
namespace util {
template <typename Ret, typename ...Args>
class signal {
public:
typedef Ret (*callback_function)(Args...);
typedef std::function<Ret(Args...)> callback_object;
template <typename Ret, typename ...Args>
class signal {
public:
typedef Ret (*callback_function)(Args...);
typedef std::function<Ret(Args...)> callback_object;
protected:
std::vector<callback_object> m_children;
protected:
std::vector<callback_object> m_children;
public:
signal ()
{ m_children.reserve (16); }
public:
signal ()
{ m_children.reserve (16); }
/// Add a callback to list.
void connect (callback_object _cb)
{ m_children.push_back (_cb); }
/// Add a callback to list.
void connect (callback_object _cb)
{ m_children.push_back (_cb); }
/// Add a callback to the list.
void connect (callback_function _cb)
{ m_children.push_back (_cb); }
/// Add a callback to the list.
void connect (callback_function _cb)
{ m_children.push_back (_cb); }
/// Remove all instances of callback `cb'
//void disconnect (callback_function _cb)
// { disconnect (callback_object (_cb)); }
/// Remove all instances of callback `cb'
//void disconnect (callback_function _cb)
// { disconnect (callback_object (_cb)); }
/// Remove all instances of callback `cb'
/*void disconnect (callback_object _cb) {
m_children.erase (std::remove (m_children.begin (),
m_children.end (),
_cb),
m_children.end ());
}*/
/// Remove all instances of callback `cb'
/*void disconnect (callback_object _cb) {
m_children.erase (std::remove (m_children.begin (),
m_children.end (),
_cb),
m_children.end ());
}*/
/// Disconnect all callbacks
void clear (void)
{ m_children.clear (); }
/// Disconnect all callbacks
void clear (void)
{ m_children.clear (); }
/// Returns the number of callbacks connected.
unsigned int size (void) const
{ return m_children.size (); }
/// Returns the number of callbacks connected.
unsigned int size (void) const
{ return m_children.size (); }
/// Execute all callbacks, ignoring the return parameters. Does not combine results.
void operator () (Args... tail) {
for (auto i = m_children.begin (), end = m_children.end (); i != end; ++i)
(*i)(tail...);
}
};
/// Execute all callbacks, ignoring the return parameters. Does not combine results.
void operator () (Args... tail) {
for (auto i = m_children.begin (), end = m_children.end (); i != end; ++i)
(*i)(tail...);
}
};
}
#endif // __SIGNAL_HPP