Defines a reactive domain.
// (1)
#define REACTIVE_DOMAIN(name, mode)
// (2)
#define REACTIVE_DOMAIN(name, mode, engine)
Defines a reactive domain name
and initializes its static data.
A domain is a type; for a given name D
, its definition would be similar to this:
class D
{
public:
// Deleted default constructor to prevent instantiation
DomainBase() = delete;
// Type aliases
template <typename S>
using SignalT = Signal<D,S>;
template <typename S>
using VarSignalT = VarSignal<D,S>;
template <typename E = Token>
using EventsT = Events<D,E>;
template <typename E = Token>
using EventSourceT = EventSource<D,E>;
using ObserverT = Observer<D>;
using ReactorT = Reactor<D>;
};
The mode
parameter has to be of type EDomainMode
, which is defined as follows:
enum EDomainMode
{
sequential,
sequential_concurrent,
parallel,
parallel_concurrent
};
The engine
parameter selects an explicit propagation engine.
It has to be of type template <EPropagationMode> class T
If this parameter is omitted, a default engine is selected based on the given mode.
The following table lists the available engines and the modes they support:
Engine | ToposortEngine | PulsecountEngine | SubtreeEngine |
sequential | Yes | No | No |
sequential_concurrent | Yes | No | No |
parallel | Yes | Yes | Yes |
parallel_concurrent | Yes | Yes | Yes |