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"
27#include "mbsim/utils/utils.h"
29namespace MBSimControl {
32 template<
typename Sig>
36 template<
typename Ret,
typename Arg>
41 void setReturnSignal(
Signal *ret_);
43 std::pair<int, int> getRetSize()
const override {
return std::make_pair(ret->getSignalSize(),1); }
45 Ret operator()(
const Arg& a)
override {
51 void initializeUsingXML(xercesc::DOMElement *element)
override;
56 std::string retString;
60 template<
typename Ret,
typename Arg>
65 template<
typename Ret,
typename Arg>
66 void SignalFunction<Ret(Arg)>::initializeUsingXML(xercesc::DOMElement *element) {
68 xercesc::DOMElement *e;
69 e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIMCONTROL%
"returnSignal");
70 retString=MBXMLUtils::E(e)->getAttribute(
"ref");
73 template<
typename Ret,
typename Arg>
76 if(not retString.empty())
77 setReturnSignal(this->
template getByPath<Signal>(retString));
79 MBSim::Element::throwError(
"(SignalFunction::init): signal is not given!");
87 template<
typename Ret,
typename Arg1,
typename Arg2>
92 void setReturnSignal(
Signal *ret_);
94 std::pair<int, int> getRetSize()
const override {
return std::make_pair(ret->getSignalSize(),1); }
96 Ret operator()(
const Arg1& a1,
const Arg2& a2)
override {
102 void initializeUsingXML(xercesc::DOMElement *element)
override;
107 std::string retString;
111 template<
typename Ret,
typename Arg1,
typename Arg2>
116 template<
typename Ret,
typename Arg1,
typename Arg2>
117 void SignalFunction<Ret(Arg1, Arg2)>::initializeUsingXML(xercesc::DOMElement *element) {
119 xercesc::DOMElement *e;
120 e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIMCONTROL%
"returnSignal");
121 retString=MBXMLUtils::E(e)->getAttribute(
"ref");
124 template<
typename Ret,
typename Arg1,
typename Arg2>
127 if(not retString.empty())
128 setReturnSignal(this->
template getByPath<Signal>(retString));
130 MBSim::Element::throwError(
"(SignalFunction::init): Signal is not given!");
A function which get its return value from a signal.
Definition: signal_function.h:33
Signal.
Definition: signal_.h:38