20 #ifndef _SIGNAL_FUNCTION_H_
21 #define _SIGNAL_FUNCTION_H_
23 #include "mbsim/functions/function.h"
24 #include "mbsimControl/signal_.h"
25 #include "mbsim/element.h"
26 #include "mbsim/functions/function.h"
28 namespace MBSimControl {
31 template<
typename Sig>
35 template<
typename Ret,
typename Arg>
40 void setReturnSignal(
Signal *ret_);
42 virtual Ret operator()(
const Arg& a) {
43 return MBSim::FromVecV<Ret>::cast(ret->getSignal());
46 void init(MBSim::Element::InitStage stage);
48 void initializeUsingXML(xercesc::DOMElement *element);
51 std::string retString;
55 template<
typename Ret,
typename Arg>
60 template<
typename Ret,
typename Arg>
61 void SignalFunction<Ret(Arg)>::initializeUsingXML(xercesc::DOMElement *element) {
62 MBSim::Function<Ret(Arg)>::initializeUsingXML(element);
63 xercesc::DOMElement *e;
64 e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIMCONTROL%
"returnSignal");
65 retString=MBXMLUtils::E(e)->getAttribute(
"ref");
68 template<
typename Ret,
typename Arg>
69 void SignalFunction<Ret(Arg)>::init(MBSim::Element::InitStage stage) {
70 if(stage==MBSim::Element::resolveXMLPath) {
72 setReturnSignal(this->
template getByPath<Signal>(retString));
73 MBSim::Function<Ret(Arg)>::init(stage);
76 MBSim::Function<Ret(Arg)>::init(stage);
80 template<
typename Ret,
typename Arg1,
typename Arg2>
81 class SignalFunction<Ret(Arg1,Arg2)> :
public MBSim::Function<Ret(Arg1,Arg2)> {
85 void setReturnSignal(
Signal *ret_);
87 virtual Ret operator()(
const Arg1& a1,
const Arg2& a2) {
88 return MBSim::FromVecV<Ret>::cast(ret->getSignal());
91 void init(MBSim::Element::InitStage stage);
93 void initializeUsingXML(xercesc::DOMElement *element);
96 std::string retString;
100 template<
typename Ret,
typename Arg1,
typename Arg2>
105 template<
typename Ret,
typename Arg1,
typename Arg2>
106 void SignalFunction<Ret(Arg1, Arg2)>::initializeUsingXML(xercesc::DOMElement *element) {
107 MBSim::Function<Ret(Arg1,Arg2)>::initializeUsingXML(element);
108 xercesc::DOMElement *e;
109 e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIMCONTROL%
"returnSignal");
110 retString=MBXMLUtils::E(e)->getAttribute(
"ref");
113 template<
typename Ret,
typename Arg1,
typename Arg2>
114 void SignalFunction<Ret(Arg1, Arg2)>::init(MBSim::Element::InitStage stage) {
115 if(stage==MBSim::Element::resolveXMLPath) {
117 setReturnSignal(this->
template getByPath<Signal>(retString));
118 MBSim::Function<Ret(Arg1,Arg2)>::init(stage);
121 MBSim::Function<Ret(Arg1,Arg2)>::init(stage);
A function which get its return value from a signal.
Definition: signal_function.h:32
Signal.
Definition: signal_.h:37