26 #ifndef CASADI_IMPORTER_INTERNAL_HPP
27 #define CASADI_IMPORTER_INTERNAL_HPP
29 #include "importer.hpp"
30 #include "function_internal.hpp"
31 #include "plugin_interface.hpp"
45 ImporterInternal :
public SharedObjectInternal,
46 public PluginInterface<ImporterInternal> {
50 explicit ImporterInternal(
const std::string& name);
53 ~ImporterInternal()
override;
58 std::string class_name()
const override {
return "ImporterInternal";}
63 void disp(std::ostream& stream,
bool more)
const override;
66 typedef ImporterInternal* (*Creator)(
const std::string& name);
73 void construct(
const Dict& opts);
79 static const Options options_;
80 virtual const Options& get_options()
const {
return options_;}
86 virtual void init(
const Dict& opts);
88 virtual void finalize() {}
94 static std::map<std::string, Plugin> solvers_;
97 static const std::string infix_;
100 static std::string shortname() {
return "importer";}
103 const char* plugin_name()
const override {
return "none";}
106 virtual signal_t get_function(
const std::string& symname) {
return nullptr;}
109 bool has_function(
const std::string& symname)
const;
114 bool has_meta(
const std::string& cmd, casadi_int ind=-1)
const;
119 std::string get_meta(
const std::string& cmd, casadi_int ind=-1)
const;
122 void read_meta(std::istream& file, casadi_int& offset);
125 void read_external(
const std::string& sym,
bool inlined,
126 std::istream& file, casadi_int& offset);
129 bool inlined(
const std::string& symname)
const;
132 std::string body(
const std::string& symname)
const;
135 virtual std::string library()
const;
138 virtual bool can_have_meta()
const {
return true;}
143 std::string to_text(
const std::string& cmd, casadi_int ind=-1)
const;
146 static inline std::string indexed(
const std::string& cmd, casadi_int ind) {
147 std::stringstream ss;
148 ss << cmd <<
"[" << ind <<
"]";
156 std::map<std::string, std::pair<casadi_int, std::string> > meta_;
159 std::map<std::string, std::pair<bool, std::string> > external_;
166 void serialize(SerializingStream& s)
const;
168 virtual void serialize_type(SerializingStream& s)
const;
169 virtual void serialize_body(SerializingStream& s)
const;
171 static ImporterInternal* deserialize(DeserializingStream& s);
174 explicit ImporterInternal(DeserializingStream& s);
184 DllLibrary :
public ImporterInternal {
186 #if defined(WITH_DL) && defined(_WIN32)
187 typedef HINSTANCE handle_t;
189 typedef void* handle_t;
195 explicit DllLibrary(
const std::string& bin_name);
197 void finalize()
override;
202 ~DllLibrary()
override;
207 std::string class_name()
const override {
return "DllLibrary";}
210 signal_t get_function(
const std::string& symname)
override;
213 std::string library()
const override;
216 bool can_have_meta()
const override {
return false;}
218 static ImporterInternal* deserialize(DeserializingStream& s);
221 explicit DllLibrary(DeserializingStream& s) : ImporterInternal(s) {}
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.