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;
|
typedef std::list<callback> group;
|
||||||
group m_children;
|
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"
|
#include "signal.ipp"
|
||||||
|
18
signal.ipp
18
signal.ipp
@ -167,5 +167,23 @@ namespace util {
|
|||||||
(*current)(std::forward<Args> (tail)...);
|
(*current)(std::forward<Args> (tail)...);
|
||||||
} while (looping);
|
} 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
|
int
|
||||||
main (int, char **)
|
main (int, char **)
|
||||||
@ -67,6 +80,7 @@ main (int, char **)
|
|||||||
test_null ();
|
test_null ();
|
||||||
test_single ();
|
test_single ();
|
||||||
test_double ();
|
test_double ();
|
||||||
|
test_value_signal ();
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user