@@ -127,8 +127,11 @@ class TransactionStatus
127127private:
128128 std::shared_ptr<StateT> state_;
129129
130- template <typename D, typename TPolicy>
131- friend class DomainBase ;
130+ template <typename D, typename F>
131+ friend void AsyncTransaction (TransactionStatus& status, F&& func);
132+
133+ template <typename D, typename F>
134+ friend void AsyncTransaction (TurnFlagsT flags, TransactionStatus& status, F&& func);
132135};
133136
134137// /////////////////////////////////////////////////////////////////////////////////////////////////
@@ -178,59 +181,6 @@ class DomainBase
178181
179182 using ReactorT = Reactor<D>;
180183
181- // /////////////////////////////////////////////////////////////////////////////////////////////
182- // / DoTransaction
183- // /////////////////////////////////////////////////////////////////////////////////////////////
184- template <typename F>
185- static void DoTransaction (F&& func)
186- {
187- using REACT_IMPL ::DomainSpecificInputManager;
188- DomainSpecificInputManager<D>::Instance ().DoTransaction (0 , std::forward<F>(func));
189- }
190-
191- template <typename F>
192- static void DoTransaction (TurnFlagsT flags, F&& func)
193- {
194- using REACT_IMPL ::DomainSpecificInputManager;
195- DomainSpecificInputManager<D>::Instance ().DoTransaction (flags, std::forward<F>(func));
196- }
197-
198- // /////////////////////////////////////////////////////////////////////////////////////////////
199- // / AsyncTransaction
200- // /////////////////////////////////////////////////////////////////////////////////////////////
201- template <typename F>
202- static void AsyncTransaction (F&& func)
203- {
204- using REACT_IMPL ::DomainSpecificInputManager;
205- DomainSpecificInputManager<D>::Instance ()
206- .AsyncTransaction (0 , nullptr , std::forward<F>(func));
207- }
208-
209- template <typename F>
210- static void AsyncTransaction (TurnFlagsT flags, F&& func)
211- {
212- using REACT_IMPL ::DomainSpecificInputManager;
213- DomainSpecificInputManager<D>::Instance ()
214- .AsyncTransaction (flags, nullptr , std::forward<F>(func));
215- }
216-
217- template <typename F>
218- static void AsyncTransaction (TransactionStatus& status, F&& func)
219- {
220- using REACT_IMPL ::DomainSpecificInputManager;
221-
222- DomainSpecificInputManager<D>::Instance ()
223- .AsyncTransaction (0 , status.state_ , std::forward<F>(func));
224- }
225-
226- template <typename F>
227- static void AsyncTransaction (TurnFlagsT flags, TransactionStatus& status, F&& func)
228- {
229- using REACT_IMPL ::DomainSpecificInputManager;
230- DomainSpecificInputManager<D>::Instance ()
231- .AsyncTransaction (flags, status.state_ , std::forward<F>(func));
232- }
233-
234184#ifdef REACT_ENABLE_LOGGING
235185 // /////////////////////////////////////////////////////////////////////////////////////////////
236186 // / Log
@@ -294,6 +244,8 @@ template
294244auto MakeContinuation (const Signal<D,S>& trigger, FIn&& func)
295245 -> Continuation<D,DOut>
296246{
247+ static_assert (DOut::is_concurrent, " MakeContinuation requires concurrent target domain." );
248+
297249 using REACT_IMPL ::SignalContinuationNode;
298250 using F = typename std::decay<FIn>::type;
299251
@@ -315,6 +267,8 @@ template
315267auto MakeContinuation (const Events<D,E>& trigger, FIn&& func)
316268 -> Continuation<D,DOut>
317269{
270+ static_assert (DOut::is_concurrent, " MakeContinuation requires concurrent target domain." );
271+
318272 using REACT_IMPL ::EventContinuationNode;
319273 using F = typename std::decay<FIn>::type;
320274
@@ -338,6 +292,8 @@ auto MakeContinuation(const Events<D,E>& trigger,
338292 const SignalPack<D,TDepValues...>& depPack, FIn&& func)
339293 -> Continuation<D,DOut>
340294{
295+ static_assert (DOut::is_concurrent, " MakeContinuation requires concurrent target domain." );
296+
341297 using REACT_IMPL ::SyncedContinuationNode;
342298 using F = typename std::decay<FIn>::type;
343299
@@ -366,6 +322,67 @@ auto MakeContinuation(const Events<D,E>& trigger,
366322 depPack.Data );
367323}
368324
325+ // /////////////////////////////////////////////////////////////////////////////////////////////
326+ // / DoTransaction
327+ // /////////////////////////////////////////////////////////////////////////////////////////////
328+ template <typename D, typename F>
329+ void DoTransaction (F&& func)
330+ {
331+ using REACT_IMPL ::DomainSpecificInputManager;
332+ DomainSpecificInputManager<D>::Instance ().DoTransaction (0 , std::forward<F>(func));
333+ }
334+
335+ template <typename D, typename F>
336+ void DoTransaction (TurnFlagsT flags, F&& func)
337+ {
338+ using REACT_IMPL ::DomainSpecificInputManager;
339+ DomainSpecificInputManager<D>::Instance ().DoTransaction (flags, std::forward<F>(func));
340+ }
341+
342+ // /////////////////////////////////////////////////////////////////////////////////////////////
343+ // / AsyncTransaction
344+ // /////////////////////////////////////////////////////////////////////////////////////////////
345+ template <typename D, typename F>
346+ void AsyncTransaction (F&& func)
347+ {
348+ static_assert (D::is_concurrent, " AsyncTransaction requires concurrent domain." );
349+
350+ using REACT_IMPL ::DomainSpecificInputManager;
351+ DomainSpecificInputManager<D>::Instance ()
352+ .AsyncTransaction (0 , nullptr , std::forward<F>(func));
353+ }
354+
355+ template <typename D, typename F>
356+ void AsyncTransaction (TurnFlagsT flags, F&& func)
357+ {
358+ static_assert (D::is_concurrent, " AsyncTransaction requires concurrent domain." );
359+
360+ using REACT_IMPL ::DomainSpecificInputManager;
361+ DomainSpecificInputManager<D>::Instance ()
362+ .AsyncTransaction (flags, nullptr , std::forward<F>(func));
363+ }
364+
365+ template <typename D, typename F>
366+ void AsyncTransaction (TransactionStatus& status, F&& func)
367+ {
368+ static_assert (D::is_concurrent, " AsyncTransaction requires concurrent domain." );
369+
370+ using REACT_IMPL ::DomainSpecificInputManager;
371+
372+ DomainSpecificInputManager<D>::Instance ()
373+ .AsyncTransaction (0 , status.state_ , std::forward<F>(func));
374+ }
375+
376+ template <typename D, typename F>
377+ void AsyncTransaction (TurnFlagsT flags, TransactionStatus& status, F&& func)
378+ {
379+ static_assert (D::is_concurrent, " AsyncTransaction requires concurrent domain." );
380+
381+ using REACT_IMPL ::DomainSpecificInputManager;
382+ DomainSpecificInputManager<D>::Instance ()
383+ .AsyncTransaction (flags, status.state_ , std::forward<F>(func));
384+ }
385+
369386/* *****************************************/ REACT_END /* *****************************************/
370387
371388/* **************************************/ REACT_IMPL_BEGIN /* *************************************/
0 commit comments