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_;
96 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
97 static std::mutex mutex_solvers_;
101 static const std::string infix_;
104 static std::string shortname() {
return "importer";}
107 const char* plugin_name()
const override {
return "none";}
110 virtual signal_t get_function(
const std::string& symname) {
return nullptr;}
113 bool has_function(
const std::string& symname)
const;
118 bool has_meta(
const std::string& cmd, casadi_int ind=-1)
const;
123 std::string get_meta(
const std::string& cmd, casadi_int ind=-1)
const;
126 void read_meta(std::istream& file, casadi_int& offset);
129 void read_external(
const std::string& sym,
bool inlined,
130 std::istream& file, casadi_int& offset);
133 bool inlined(
const std::string& symname)
const;
136 std::string body(
const std::string& symname)
const;
139 virtual std::string library()
const;
142 virtual bool can_have_meta()
const {
return true;}
147 std::string to_text(
const std::string& cmd, casadi_int ind=-1)
const;
150 static inline std::string indexed(
const std::string& cmd, casadi_int ind) {
151 std::stringstream ss;
152 ss << cmd <<
"[" << ind <<
"]";
160 std::map<std::string, std::pair<casadi_int, std::string> > meta_;
163 std::map<std::string, std::pair<bool, std::string> > external_;
170 void serialize(SerializingStream& s)
const;
172 virtual void serialize_type(SerializingStream& s)
const;
173 virtual void serialize_body(SerializingStream& s)
const;
175 static ImporterInternal* deserialize(DeserializingStream& s);
178 explicit ImporterInternal(DeserializingStream& s);
188 DllLibrary :
public ImporterInternal {
190 #if defined(WITH_DL) && defined(_WIN32)
191 typedef HINSTANCE handle_t;
193 typedef void* handle_t;
199 explicit DllLibrary(
const std::string& bin_name);
201 void finalize()
override;
206 ~DllLibrary()
override;
211 std::string class_name()
const override {
return "DllLibrary";}
214 signal_t get_function(
const std::string& symname)
override;
217 std::string library()
const override;
220 bool can_have_meta()
const override {
return false;}
222 static ImporterInternal* deserialize(DeserializingStream& s);
225 explicit DllLibrary(DeserializingStream& s) : ImporterInternal(s) {}
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.