26 #ifndef CASADI_EXTERNAL_IMPL_HPP
27 #define CASADI_EXTERNAL_IMPL_HPP
29 #include "external.hpp"
30 #include "function_internal.hpp"
38 #define _WIN32_WINNT 0x0502
50 class CASADI_EXPORT External :
public FunctionInternal {
60 getint_t get_n_in_, get_n_out_;
65 name_t get_name_in_, get_name_out_;
70 default_t get_default_in_;
81 std::vector<casadi_int> int_data_;
82 std::vector<double> real_data_;
83 std::string string_data_;
89 std::vector<std::string> config_args_;
90 std::vector<const char*> args_;
96 External(
const std::string& name,
const Importer& li,
97 const std::vector<std::string> config_args=std::vector<std::string>());
102 ~External()
override = 0;
107 virtual bool any_symbol_found()
const;
110 Function factory(
const std::string& name,
111 const std::vector<std::string>& s_in,
112 const std::vector<std::string>& s_out,
114 const Dict& opts)
const override;
119 std::string class_name()
const override {
return "External";}
124 bool is_a(
const std::string& type,
bool recursive)
const override {
125 return type==
"External" || (recursive && FunctionInternal::is_a(type, recursive));
131 virtual void init_external();
134 void init(
const Dict& opts)
override;
139 void codegen_declarations(CodeGenerator& g)
const override;
144 void codegen_body(CodeGenerator& g)
const override;
149 bool codegen_needs_mem()
const override {
return true; }
156 bool codegen_mem_is_opaque()
const override {
return true; }
161 void codegen_incref(CodeGenerator& g)
const override;
166 void codegen_decref(CodeGenerator& g)
const override;
171 void codegen_checkout(CodeGenerator& g)
const override;
176 void codegen_release(CodeGenerator& g)
const override;
181 void codegen_alloc_mem(CodeGenerator& g)
const override;
186 void codegen_init_mem(CodeGenerator& g)
const override;
191 void codegen_free_mem(CodeGenerator& g)
const override;
197 size_t get_n_in()
override;
198 size_t get_n_out()
override;
204 double get_default_in(casadi_int i)
const override;
210 std::string get_name_in(casadi_int i)
override;
211 std::string get_name_out(casadi_int i)
override;
218 Function get_forward(casadi_int nfwd,
const std::string& name,
219 const std::vector<std::string>& inames,
220 const std::vector<std::string>& onames,
221 const Dict& opts)
const override;
222 bool has_forward(casadi_int nfwd)
const override;
229 Function get_reverse(casadi_int nadj,
const std::string& name,
230 const std::vector<std::string>& inames,
231 const std::vector<std::string>& onames,
232 const Dict& opts)
const override;
233 bool has_reverse(casadi_int nadj)
const override;
240 bool has_jacobian()
const override;
241 Function get_jacobian(
const std::string& name,
242 const std::vector<std::string>& inames,
243 const std::vector<std::string>& onames,
244 const Dict& opts)
const override;
250 void serialize_body(SerializingStream &s)
const override;
255 static ProtoFunction* deserialize(DeserializingStream& s);
260 std::string serialize_base_function()
const override {
return "External"; }
266 explicit External(DeserializingStream& s);
269 class CASADI_EXPORT GenericExternal :
public External {
271 sparsity_t get_sparsity_in_, get_sparsity_out_, get_jac_sparsity_;
273 diff_t get_diff_in_, get_diff_out_;
279 GenericExternal(
const std::string& name,
const Importer& li,
280 const std::vector<std::string> config_args=std::vector<std::string>());
285 ~GenericExternal()
override { this->clear_mem();}
290 bool any_symbol_found()
const override;
295 void init_external()
override;
298 void init(
const Dict& opts)
override;
304 Sparsity get_sparsity_in(casadi_int i)
override;
305 Sparsity get_sparsity_out(casadi_int i)
override;
312 bool has_jac_sparsity(casadi_int oind, casadi_int iind)
const override;
313 Sparsity get_jac_sparsity(casadi_int oind, casadi_int iind,
bool symmetric)
const override;
320 bool get_diff_in(casadi_int i)
override;
321 bool get_diff_out(casadi_int i)
override;
327 void serialize_type(SerializingStream &s)
const override;
332 explicit GenericExternal(DeserializingStream& s);
std::map< std::string, std::vector< std::string > > AuxOut
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.