26 #ifndef CASADI_RESOURCE_INTERNAL_HPP
27 #define CASADI_RESOURCE_INTERNAL_HPP
29 #include "resource.hpp"
30 #include "shared_object.hpp"
31 #include "serializing_stream.hpp"
40 class CASADI_EXPORT ResourceInternal :
public SharedObjectInternal {
50 explicit ResourceInternal();
52 virtual const std::string& path()
const = 0;
53 void serialize(SerializingStream& s)
const;
55 virtual void serialize_type(SerializingStream& s)
const;
56 virtual void serialize_body(SerializingStream& s)
const;
58 static ResourceInternal* deserialize(DeserializingStream& s);
59 void change_option(
const std::string& option_name,
60 const GenericType& option_value);
62 explicit ResourceInternal(DeserializingStream& s);
63 std::string serialize_mode_;
66 class CASADI_EXPORT DirResource :
public ResourceInternal {
71 DirResource(
const std::string& path);
72 ~DirResource()
override;
74 const std::string& path()
const override {
return path_;}
79 std::string class_name()
const override {
return "DirResource";}
82 void disp(std::ostream& stream,
bool more)
const override;
84 void serialize_type(SerializingStream& s)
const override;
85 void serialize_body(SerializingStream& s)
const override;
87 static ResourceInternal* deserialize(DeserializingStream& s);
91 explicit DirResource(DeserializingStream& s);
99 class CASADI_EXPORT TemporaryDirResource :
public ResourceInternal {
102 TemporaryDirResource(
const std::string& base_name,
const std::string& suffix=
"");
103 ~TemporaryDirResource()
override;
105 const std::string& path()
const override {
return dir_;}
110 std::string class_name()
const override {
return "TemporaryDirResource";}
113 void disp(std::ostream& stream,
bool more)
const override;
115 explicit TemporaryDirResource() : ResourceInternal() {}
116 explicit TemporaryDirResource(DeserializingStream& s) : ResourceInternal(s) {}
118 void setup_temp_dir(
const std::string& base_name,
const std::string& suffix=
"");
119 std::string lock_file_;
126 class CASADI_EXPORT ZipResource :
public TemporaryDirResource {
135 ZipResource(
const std::string& path);
142 std::string class_name()
const override {
return "ZipResource";}
145 void disp(std::ostream& stream,
bool more)
const override;
150 void serialize_type(SerializingStream& s)
const override;
151 void serialize_body(SerializingStream& s)
const override;
153 static ResourceInternal* deserialize(DeserializingStream& s);
157 explicit ZipResource(DeserializingStream& s);
164 class CASADI_EXPORT ZipMemResource :
public TemporaryDirResource {
166 ZipMemResource(
const std::istream& src);
172 std::string class_name()
const override {
return "ZipMemResource";}
175 void disp(std::ostream& stream,
bool more)
const override;
177 void serialize_body(SerializingStream& s)
const override;
179 static ResourceInternal* deserialize(DeserializingStream& s);
181 mutable std::stringstream blob_;
182 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
183 mutable std::mutex mutex_blob_;
186 explicit ZipMemResource(DeserializingStream& s);