26 #ifndef CASADI_SWITCH_HPP
27 #define CASADI_SWITCH_HPP
29 #include "function_internal.hpp"
39 class CASADI_EXPORT Switch :
public FunctionInternal {
45 Switch(
const std::string& name,
46 const std::vector<Function>& f,
const Function& f_def);
56 std::string class_name()
const override {
return "Switch";}
62 size_t get_n_in()
override;
63 size_t get_n_out()
override;
70 Sparsity get_sparsity_in(casadi_int i)
override;
71 Sparsity get_sparsity_out(casadi_int i)
override;
77 void init(
const Dict& opts)
override;
82 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w,
void* mem)
const override;
87 int eval_sx(
const SXElem** arg, SXElem** res,
88 casadi_int* iw, SXElem* w,
void* mem)
const override;
94 bool has_forward(casadi_int nfwd)
const override {
return true;}
95 Function get_forward(casadi_int nfwd,
const std::string& name,
96 const std::vector<std::string>& inames,
97 const std::vector<std::string>& onames,
98 const Dict& opts)
const override;
105 bool has_reverse(casadi_int nadj)
const override {
return true;}
106 Function get_reverse(casadi_int nadj,
const std::string& name,
107 const std::vector<std::string>& inames,
108 const std::vector<std::string>& onames,
109 const Dict& opts)
const override;
115 void disp_more(std::ostream& stream)
const override;
120 void codegen_declarations(CodeGenerator& g)
const override;
125 bool has_codegen()
const override {
return true;}
130 void codegen_body(CodeGenerator& g)
const override;
133 std::vector<Function> f_;
139 bool project_in_, project_out_;
144 void serialize_body(SerializingStream &s)
const override;
149 static ProtoFunction* deserialize(DeserializingStream& s) {
return new Switch(s); }
152 Dict info()
const override;
155 void find(std::map<FunctionInternal*, Function>& all_fun, casadi_int max_depth)
const override;
161 explicit Switch(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.