36#ifndef BERTINI_DETAIL_EVENTS_HPP
37#define BERTINI_DETAIL_EVENTS_HPP
38#include <boost/type_index.hpp>
47 { BOOST_TYPE_INDEX_REGISTER_CLASS
52 template<
class ObsT,
bool IsConst = true>
67 class Event<ObsT, true> :
public AnyEvent
68 { BOOST_TYPE_INDEX_REGISTER_CLASS
76 Event(ObsT
const& obs) : current_observable_(obs)
79 virtual ~Event() =
default;
88 ObsT
const& Get()
const
89 {
return current_observable_;}
93 using HeldT =
const ObsT&;
95 const ObsT& current_observable_;
111 class Event<ObsT,false> :
public AnyEvent
112 { BOOST_TYPE_INDEX_REGISTER_CLASS
120 Event(ObsT & obs) : current_observable_(obs)
123 virtual ~Event() =
default;
133 {
return current_observable_;}
139 ObsT& current_observable_;
142 template<
typename ObsT>
143 using ConstEvent = Event<ObsT,true>;
145 template<
typename ObsT>
146 using MutableEvent = Event<ObsT,false>;
154 #define ADD_BERTINI_EVENT_TYPE(event_name,event_parenttype) template<class ObservedT> \
155 class event_name : public event_parenttype<ObservedT> \
156 { BOOST_TYPE_INDEX_REGISTER_CLASS \
158 using HeldT = typename event_parenttype<ObservedT>::HeldT; \
159 event_name(HeldT obs) : event_parenttype<ObservedT>(obs){} \
160 virtual ~event_name() = default; \
161 event_name() = delete; }
Strawman Event type, enabling polymorphism.
Definition detail/events.hpp:47