signal: add value wrapper signal
This commit is contained in:
parent
d342ef72f5
commit
c8f067bf60
11
signal.hpp
11
signal.hpp
@ -60,6 +60,17 @@ namespace util {
|
||||
typedef std::list<callback> group;
|
||||
group m_children;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
class value_signal : public signal<void(T)> {
|
||||
public:
|
||||
operator const T&() const;
|
||||
|
||||
value_signal<T>& operator= (const T&);
|
||||
|
||||
private:
|
||||
T m_value;
|
||||
};
|
||||
}
|
||||
|
||||
#include "signal.ipp"
|
||||
|
18
signal.ipp
18
signal.ipp
@ -167,5 +167,23 @@ namespace util {
|
||||
(*current)(std::forward<Args> (tail)...);
|
||||
} while (looping);
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <typename T>
|
||||
value_signal<T>::operator const T&() const
|
||||
{
|
||||
return m_value;
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
value_signal<T>&
|
||||
value_signal<T>::operator= (const T &t)
|
||||
{
|
||||
m_value = t;
|
||||
(*this) (m_value);
|
||||
return *this;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -60,6 +60,19 @@ test_linking_pointers (void)
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void
|
||||
test_value_signal (void)
|
||||
{
|
||||
util::value_signal<unsigned> val;
|
||||
auto raii = val.connect ([] (unsigned v) { CHECK_EQ (v, 42); });
|
||||
val = 42u;
|
||||
|
||||
unsigned check = val;
|
||||
CHECK_EQ (check, 42);
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
int
|
||||
main (int, char **)
|
||||
@ -67,6 +80,7 @@ main (int, char **)
|
||||
test_null ();
|
||||
test_single ();
|
||||
test_double ();
|
||||
test_value_signal ();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user