@@ -520,95 +520,4 @@ class PulseNode : public EventStreamNode<D,S>
520520 const SharedPtrT<EventStreamNode<D,E>> trigger_;
521521};
522522
523- // /////////////////////////////////////////////////////////////////////////////////////////////////
524- // / EventGeneratorNode
525- // /////////////////////////////////////////////////////////////////////////////////////////////////
526- template
527- <
528- typename D,
529- typename E,
530- typename TOut,
531- typename TFunc,
532- typename ... TDepValues
533- >
534- class EventGeneratorNode : public EventStreamNode <D,TOut>
535- {
536- public:
537- template <typename F>
538- EventGeneratorNode (const std::shared_ptr<EventStreamNode<D,E>>& trigger, F&& func,
539- const std::shared_ptr<SignalNode<D,TDepValues>>& ... deps) :
540- EventStreamNode{ },
541- trigger_{ trigger },
542- func_{ std::forward<F>(func) },
543- deps_{ deps ... }
544- {
545- Engine::OnNodeCreate (*this );
546- Engine::OnNodeAttach (*this , *trigger_);
547- REACT_EXPAND_PACK (Engine::OnNodeAttach (*this , *deps));
548- }
549-
550- ~EventGeneratorNode ()
551- {
552-
553- Engine::OnNodeDetach (*this , *trigger_);
554-
555- apply (
556- DetachFunctor<D,EventGeneratorNode,
557- SharedPtrT<SignalNode<D,TDepValues>>...>{ *this },
558- deps_);
559-
560- Engine::OnNodeDestroy (*this );
561- }
562-
563- virtual const char * GetNodeType () const override { return " EventGeneratorNode" ; }
564- virtual int DependencyCount () const override { return 1 + sizeof ...(TDepValues); }
565-
566- virtual void Tick (void * turnPtr) override
567- {
568- struct EvalFunctor_
569- {
570- EvalFunctor_ (const E& e, TFunc& f) :
571- MyEvent{ e },
572- MyFunc{ f }
573- {}
574-
575- void operator ()(const SharedPtrT<SignalNode<D,TDepValues>>& ... args)
576- {
577- MyFunc (MyEvent, args->ValueRef () ...);
578- }
579-
580- const E& MyEvent;
581- TFunc& MyFunc;
582- };
583-
584- typedef typename D::Engine::TurnT TurnT;
585- TurnT& turn = *reinterpret_cast <TurnT*>(turnPtr);
586-
587- SetCurrentTurn (turn, true );
588- trigger_->SetCurrentTurn (turn);
589-
590- REACT_LOG (D::Log ().template Append <NodeEvaluateBeginEvent>(
591- GetObjectId (*this ), turn.Id ()));
592-
593- for (const auto & e : trigger_->Events ())
594- apply (EvalFunctor_{ e, func_ }, deps_);
595-
596- REACT_LOG (D::Log ().template Append <NodeEvaluateEndEvent>(
597- GetObjectId (*this ), turn.Id ()));
598-
599- if (events_.size () > 0 )
600- Engine::OnNodePulse (*this , turn);
601- else
602- Engine::OnNodeIdlePulse (*this , turn);
603- }
604-
605- private:
606- using DepHolderT = std::tuple<SharedPtrT<SignalNode<D,TDepValues>>...>;
607-
608- const SharedPtrT<EventStreamNode<D,E>> trigger_;
609-
610- TFunc func_;
611- DepHolderT deps_;
612- };
613-
614523/* ***************************************/ REACT_IMPL_END /* **************************************/
0 commit comments