1+
2+ // Copyright Sebastian Jeckel 2016.
3+ // Distributed under the Boost Software License, Version 1.0.
4+ // (See accompanying file LICENSE_1_0.txt or copy at
5+ // http://www.boost.org/LICENSE_1_0.txt)
6+
7+ #ifndef REACT_API_H_INCLUDED
8+ #define REACT_API_H_INCLUDED
9+
10+ #pragma once
11+
12+ #include " react/detail/Defs.h"
13+ #include " react/common/Util.h"
14+
15+ /* ****************************************/ REACT_BEGIN /* ****************************************/
16+
17+ // /////////////////////////////////////////////////////////////////////////////////////////////////
18+ // / API constants
19+ // /////////////////////////////////////////////////////////////////////////////////////////////////
20+ enum OwnershipPolicy
21+ {
22+ unique,
23+ shared
24+ };
25+
26+ enum ThreadingPolicy
27+ {
28+ sequential,
29+ concurrent
30+ };
31+
32+ enum class WeightHint
33+ {
34+ automatic,
35+ light,
36+ heavy
37+ };
38+
39+ enum class TransactionFlags
40+ {
41+ none = 1 << 0 ,
42+ allow_merging = 1 << 1
43+ };
44+
45+ REACT_DEFINE_BITMASK_OPERATORS (TransactionFlags)
46+
47+ // /////////////////////////////////////////////////////////////////////////////////////////////////
48+ // / API types
49+ // /////////////////////////////////////////////////////////////////////////////////////////////////
50+
51+ // Groups
52+ template <OwnershipPolicy = unique>
53+ class ReactiveGroup ;
54+
55+ // Signals
56+ template <typename T>
57+ class SignalBase ;
58+
59+ template <typename T>
60+ class VarSignalBase ;
61+
62+ template <typename T, OwnershipPolicy = unique>
63+ class Signal ;
64+
65+ template <typename T, OwnershipPolicy = unique>
66+ class VarSignal ;
67+
68+ // Events
69+ template <typename T>
70+ class EventBase ;
71+
72+ template <typename T>
73+ class EventSourceBase ;
74+
75+ template <typename T, OwnershipPolicy = unique>
76+ class Event ;
77+
78+ template <typename T, OwnershipPolicy = unique>
79+ class EventSource ;
80+
81+ enum class Token ;
82+
83+ // Observers
84+ class Observer ;
85+
86+ // /////////////////////////////////////////////////////////////////////////////////////////////////
87+ // / Traits
88+ // /////////////////////////////////////////////////////////////////////////////////////////////////
89+ template <typename T>
90+ struct IsSignal { static const bool value = false ; };
91+
92+ template <typename T, OwnershipPolicy ownership_policy>
93+ struct IsSignal <Signal<T, ownership_policy>> { static const bool value = true ; };
94+
95+ template <typename T, OwnershipPolicy ownership_policy>
96+ struct IsSignal <VarSignal<T, ownership_policy>> { static const bool value = true ; };
97+
98+ template <typename T>
99+ struct IsEvent { static const bool value = false ; };
100+
101+ template <typename T, OwnershipPolicy ownership_policy>
102+ struct IsEvent <Event<T, ownership_policy>> { static const bool value = true ; };
103+
104+ template <typename T, OwnershipPolicy ownership_policy>
105+ struct IsEvent <EventSource<T, ownership_policy>> { static const bool value = true ; };
106+
107+ template <typename T>
108+ struct AsNonInputNode { using type = T; };
109+
110+ template <typename T, OwnershipPolicy ownership_policy>
111+ struct AsNonInputNode <VarSignal<T, ownership_policy>> { using type = Signal<T, ownership_policy>; };
112+
113+ template <typename T, OwnershipPolicy ownership_policy>
114+ struct AsNonInputNode <EventSource<T, ownership_policy>> { using type = Event<T, ownership_policy>; };
115+
116+ /* *****************************************/ REACT_END /* *****************************************/
117+
118+ #endif // REACT_TYPETRAITS_H_INCLUDED
0 commit comments