@@ -30,30 +30,12 @@ template <typename T, typename E>
3030auto Hold (const Group& group, T&& initialValue, const Event<E>& evnt) -> Signal<E>
3131{
3232 using REACT_IMPL ::HoldNode;
33- using REACT_IMPL ::PrivateEventLinkNodeInterface;
34- using REACT_IMPL ::PrivateGroupInterface;
35- using REACT_IMPL ::PrivateNodeInterface;
36- using REACT_IMPL ::CtorTag;
37-
38- const auto & graphPtr = PrivateGroupInterface::GraphPtr (group);
39-
40- return PrivateNodeInterface::CreateNodeHelper<Signal<E>, HoldNode<E>>(
41- graphPtr, std::forward<T>(initialValue), PrivateEventLinkNodeInterface::GetLocalNodePtr (graphPtr, evnt));
33+ return Signal<E>::CreateWithNode<HoldNode<E>>(group, std::forward<T>(initialValue), SameGroupOrLink (group, evnt));
4234}
4335
4436template <typename T, typename E>
4537auto Hold (T&& initialValue, const Event<E>& evnt) -> Signal<E>
46- {
47- using REACT_IMPL ::HoldNode;
48- using REACT_IMPL ::PrivateEventLinkNodeInterface;
49- using REACT_IMPL ::PrivateNodeInterface;
50- using REACT_IMPL ::CtorTag;
51-
52- const auto & graphPtr = PrivateNodeInterface::GraphPtr (evnt);
53-
54- return PrivateNodeInterface::CreateNodeHelper<Signal<E>, HoldNode<E>>(
55- graphPtr, std::forward<T>(initialValue), PrivateEventLinkNodeInterface::GetLocalNodePtr (graphPtr, evnt));
56- }
38+ { return Hold (evnt.GetGroup (), std::forward<T>(initialValue), evnt); }
5739
5840// /////////////////////////////////////////////////////////////////////////////////////////////////
5941// / Monitor - Emits value changes of target signal
@@ -62,28 +44,12 @@ template <typename S>
6244auto Monitor (const Group& group, const Signal<S>& signal) -> Event<S>
6345{
6446 using REACT_IMPL ::MonitorNode;
65- using REACT_IMPL ::PrivateSignalLinkNodeInterface;
66- using REACT_IMPL ::PrivateGroupInterface;
67- using REACT_IMPL ::PrivateNodeInterface;
68-
69- const auto & graphPtr = PrivateGroupInterface::GraphPtr (group);
70-
71- return PrivateNodeInterface::CreateNodeHelper<Event<S>, MonitorNode<S>>(
72- graphPtr, PrivateSignalLinkNodeInterface::GetLocalNodePtr (graphPtr, signal));
47+ return Event<S>::CreateWithNode<MonitorNode<S>>(group, SameGroupOrLink (group, signal));
7348}
7449
7550template <typename S>
7651auto Monitor (const Signal<S>& signal) -> Event<S>
77- {
78- using REACT_IMPL ::MonitorNode;
79- using REACT_IMPL ::PrivateSignalLinkNodeInterface;
80- using REACT_IMPL ::PrivateNodeInterface;
81-
82- const auto & graphPtr = PrivateNodeInterface::GraphPtr (signal);
83-
84- return PrivateNodeInterface::CreateNodeHelper<Event<S>, MonitorNode<S>>(
85- graphPtr, PrivateSignalLinkNodeInterface::GetLocalNodePtr (graphPtr, signal));
86- }
52+ { return Monitor (signal.GetGroup (), signal); }
8753
8854// /////////////////////////////////////////////////////////////////////////////////////////////////
8955// / Iterate - Iteratively combines signal value with values from event stream (aka Fold)
@@ -94,43 +60,19 @@ auto Iterate(const Group& group, T&& initialValue, F&& func, const Event<E>& evn
9460 using REACT_IMPL ::IterateNode;
9561 using REACT_IMPL ::IterateByRefNode;
9662 using REACT_IMPL ::IsCallableWith;
97- using REACT_IMPL ::PrivateEventLinkNodeInterface;
98- using REACT_IMPL ::PrivateGroupInterface;
99- using REACT_IMPL ::PrivateNodeInterface;
10063
10164 using FuncType = typename std::decay<F>::type;
10265 using IterNodeType = typename std::conditional<
10366 IsCallableWith<F,S,EventRange<E>,S>::value,
10467 IterateNode<S, FuncType, E>,
10568 IterateByRefNode<S, FuncType, E>>::type;
10669
107- const auto & graphPtr = PrivateGroupInterface::GraphPtr (group);
108-
109- return PrivateNodeInterface::CreateNodeHelper<Signal<S>, IterNodeType>(
110- graphPtr, std::forward<T>(initialValue), std::forward<F>(func), PrivateEventLinkNodeInterface::GetLocalNodePtr (graphPtr, evnt));
70+ return Signal<S>::CreateWithNode<IterNodeType>(group, std::forward<T>(initialValue), std::forward<F>(func), SameGroupOrLink (group, evnt));
11171}
11272
11373template <typename S, typename T, typename F, typename E>
11474auto Iterate (T&& initialValue, F&& func, const Event<E>& evnt) -> Signal<S>
115- {
116- using REACT_IMPL ::IterateNode;
117- using REACT_IMPL ::IterateByRefNode;
118- using REACT_IMPL ::IsCallableWith;
119- using REACT_IMPL ::PrivateEventLinkNodeInterface;
120- using REACT_IMPL ::PrivateNodeInterface;
121- using REACT_IMPL ::CtorTag;
122-
123- using FuncType = typename std::decay<F>::type;
124- using IterNodeType = typename std::conditional<
125- IsCallableWith<F,S,EventRange<E>,S>::value,
126- IterateNode<S, FuncType, E>,
127- IterateByRefNode<S, FuncType, E>>::type;
128-
129- const auto & graphPtr = PrivateNodeInterface::GraphPtr (evnt);
130-
131- return PrivateNodeInterface::CreateNodeHelper<Signal<S>, IterNodeType>(
132- graphPtr, std::forward<T>(initialValue), std::forward<F>(func), PrivateEventLinkNodeInterface::GetLocalNodePtr (graphPtr, evnt));
133- }
75+ { return Iterate<S>(evnt.GetGroup (), std::forward<T>(initialValue), std::forward<F>(func), evnt); }
13476
13577// /////////////////////////////////////////////////////////////////////////////////////////////////
13678// / Iterate - Synced
@@ -141,46 +83,20 @@ auto Iterate(const Group& group, T&& initialValue, F&& func, const Event<E>& evn
14183 using REACT_IMPL ::SyncedIterateNode;
14284 using REACT_IMPL ::SyncedIterateByRefNode;
14385 using REACT_IMPL ::IsCallableWith;
144- using REACT_IMPL ::PrivateSignalLinkNodeInterface;
145- using REACT_IMPL ::PrivateEventLinkNodeInterface;
146- using REACT_IMPL ::PrivateGroupInterface;
147- using REACT_IMPL ::PrivateNodeInterface;
14886
14987 using FuncType = typename std::decay<F>::type;
15088 using IterNodeType = typename std::conditional<
15189 IsCallableWith<F, S, EventRange<E>, S, Us ...>::value,
15290 SyncedIterateNode<S, FuncType, E, Us ...>,
15391 SyncedIterateByRefNode<S, FuncType, E, Us ...>>::type;
15492
155- const auto & graphPtr = PrivateGroupInterface::GraphPtr (group);
156-
157- return PrivateNodeInterface::CreateNodeHelper<Signal<S>, IterNodeType>(
158- graphPtr, std::forward<T>(initialValue), std::forward<F>(func),
159- PrivateEventLinkNodeInterface::GetLocalNodePtr (graphPtr, evnt), PrivateSignalLinkNodeInterface::GetLocalNodePtr (graphPtr, signals) ...);
93+ return Signal<S>::CreateWithNode<IterNodeType>(
94+ group, std::forward<T>(initialValue), std::forward<F>(func), SameGroupOrLink (group, evnt), SameGroupOrLink (group, signals) ...);
16095}
16196
16297template <typename S, typename T, typename F, typename E, typename ... Us>
16398auto Iterate (T&& initialValue, F&& func, const Event<E>& evnt, const Signal<Us>& ... signals) -> Signal<S>
164- {
165- using REACT_IMPL ::SyncedIterateNode;
166- using REACT_IMPL ::SyncedIterateByRefNode;
167- using REACT_IMPL ::IsCallableWith;
168- using REACT_IMPL ::PrivateSignalLinkNodeInterface;
169- using REACT_IMPL ::PrivateEventLinkNodeInterface;;
170- using REACT_IMPL ::PrivateNodeInterface;
171-
172- using FuncType = typename std::decay<F>::type;
173- using IterNodeType = typename std::conditional<
174- IsCallableWith<F, S, EventRange<E>, S, Us ...>::value,
175- SyncedIterateNode<S, FuncType, E, Us ...>,
176- SyncedIterateByRefNode<S, FuncType, E, Us ...>>::type;
177-
178- const auto & graphPtr = PrivateNodeInterface::GraphPtr (evnt);
179-
180- return PrivateNodeInterface::CreateNodeHelper<Signal<S>, IterNodeType>(
181- graphPtr, std::forward<T>(initialValue), std::forward<F>(func),
182- PrivateEventLinkNodeInterface::GetLocalNodePtr (graphPtr, evnt), PrivateSignalLinkNodeInterface::GetLocalNodePtr (graphPtr, signals) ...);
183- }
99+ { return Iterate<S>(evnt.GetGroup (), std::forward<T>(initialValue), std::forward<F>(func), evnt, signals ...); }
184100
185101// /////////////////////////////////////////////////////////////////////////////////////////////////
186102// / Snapshot - Sets signal value to value of other signal when event is received
@@ -189,30 +105,12 @@ template <typename S, typename E>
189105auto Snapshot (const Group& group, const Signal<S>& signal, const Event<E>& evnt) -> Signal<S>
190106{
191107 using REACT_IMPL ::SnapshotNode;
192- using REACT_IMPL ::PrivateSignalLinkNodeInterface;
193- using REACT_IMPL ::PrivateEventLinkNodeInterface;;
194- using REACT_IMPL ::PrivateGroupInterface;
195- using REACT_IMPL ::PrivateNodeInterface;
196-
197- const auto & graphPtr = PrivateGroupInterface::GraphPtr (group);
198-
199- return PrivateNodeInterface::CreateNodeHelper<Signal<S>, SnapshotNode<S, E>>(
200- graphPtr, PrivateSignalLinkNodeInterface::GetLocalNodePtr (graphPtr, signal), PrivateEventLinkNodeInterface::GetLocalNodePtr (graphPtr, evnt));
108+ return Signal<S>::CreateWithNode<SnapshotNode<S, E>>(group, SameGroupOrLink (group, signal), SameGroupOrLink (group, evnt));
201109}
202110
203111template <typename S, typename E>
204112auto Snapshot (const Signal<S>& signal, const Event<E>& evnt) -> Signal<S>
205- {
206- using REACT_IMPL ::SnapshotNode;
207- using REACT_IMPL ::PrivateSignalLinkNodeInterface;
208- using REACT_IMPL ::PrivateEventLinkNodeInterface;;
209- using REACT_IMPL ::PrivateNodeInterface;
210-
211- const auto & graphPtr = PrivateNodeInterface::GraphPtr (signal);
212-
213- return PrivateNodeInterface::CreateNodeHelper<Signal<S>, SnapshotNode<S, E>>(
214- graphPtr, PrivateSignalLinkNodeInterface::GetLocalNodePtr (graphPtr, signal), PrivateEventLinkNodeInterface::GetLocalNodePtr (graphPtr, evnt));
215- }
113+ { return Snapshot (signal.GetGroup (), signal, evnt); }
216114
217115// /////////////////////////////////////////////////////////////////////////////////////////////////
218116// / Pulse - Emits value of target signal when event is received
@@ -221,31 +119,12 @@ template <typename S, typename E>
221119auto Pulse (const Group& group, const Signal<S>& signal, const Event<E>& evnt) -> Event<S>
222120{
223121 using REACT_IMPL ::PulseNode;
224- using REACT_IMPL ::PrivateSignalLinkNodeInterface;
225- using REACT_IMPL ::PrivateEventLinkNodeInterface;;
226- using REACT_IMPL ::PrivateGroupInterface;
227- using REACT_IMPL ::PrivateNodeInterface;
228-
229- const auto & graphPtr = PrivateGroupInterface::GraphPtr (group);
230-
231- return PrivateNodeInterface::CreateNodeHelper<Event<S>, PulseNode<S, E>>(
232- graphPtr, PrivateSignalLinkNodeInterface::GetLocalNodePtr (graphPtr, signal), PrivateEventLinkNodeInterface::GetLocalNodePtr (graphPtr, evnt));
122+ return Event<S>::CreateWithNode<PulseNode<S, E>>(group, SameGroupOrLink (group, signal), SameGroupOrLink (group, evnt));
233123}
234124
235125template <typename S, typename E>
236126auto Pulse (const Signal<S>& signal, const Event<E>& evnt) -> Event<S>
237- {
238- using REACT_IMPL ::PulseNode;
239- using REACT_IMPL ::PrivateSignalLinkNodeInterface;
240- using REACT_IMPL ::PrivateEventLinkNodeInterface;;
241- using REACT_IMPL ::PrivateNodeInterface;
242- using REACT_IMPL ::CtorTag;
243-
244- const auto & graphPtr = PrivateNodeInterface::GraphPtr (signal);
245-
246- return PrivateNodeInterface::CreateNodeHelper<Event<S>, PulseNode<S, E>>(
247- graphPtr, PrivateSignalLinkNodeInterface::GetLocalNodePtr (graphPtr, signal), PrivateEventLinkNodeInterface::GetLocalNodePtr (graphPtr, evnt));
248- }
127+ { return Pulse (signal.GetGroup (), signal, evnt); }
249128
250129/* *****************************************/ REACT_END /* *****************************************/
251130
0 commit comments