20#ifndef _BIDIRECTIONAL_FUNCTION_H_
21#define _BIDIRECTIONAL_FUNCTION_H_
23#include "mbsim/functions/function.h"
24#include "mbsim/utils/utils.h"
30 template<
typename Ret,
typename Arg>
32 using B = fmatvec::Function<Ret(Arg)>;
35 if(fn) fn->setParent(
this);
36 if(fp) fp->setParent(
this);
42 int getArgSize()
const override {
43 return fn->getArgSize();
45 std::pair<int, int> getRetSize()
const override {
46 return fp->getRetSize();
48 Ret operator()(
const Arg &x)
override {
51 typename B::DRetDArg parDer(
const Arg &x)
override {
54 typename B::DRetDArg parDerDirDer(
const Arg &xDir,
const Arg &x)
override {
57 void setNegativeDirectionalFunction(
Function<Ret(Arg)> *fn_) {
60 fn->setName(
"NegativeDirectional");
62 void setPositiveDirectionalFunction(
Function<Ret(Arg)> *fp_) {
65 fp->setName(
"PostiveDirectional");
67 void initializeUsingXML(xercesc::DOMElement *element)
override {
68 xercesc::DOMElement *e;
69 e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"negativeDirectionalFunction");
71 e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"positiveDirectionalFunction");
75 Function<Ret(Arg)>::init(stage, config);
76 fn->init(stage, config);
77 fp->init(stage, config);
void init(Element::InitStage stage, const InitConfigSet &config) override
plots time series header
Definition: bidirectional_function.h:74
Definition: bidirectional_function.h:28
InitStage
The stages of the initialization.
Definition: element.h:62
Definition: function.h:53
static ContainerType * createAndInit(const xercesc::DOMElement *element)
Definition: objectfactory.h:103
namespace MBSim
Definition: bilateral_constraint.cc:30