+ const char* get_type();
+ Host* get_host() { return attached_to_; };
+ void set_host(Host* host) { attached_to_ = host; }
+
+ const std::unordered_map<std::string, std::string>* get_properties() const;
+ const char* get_property(const std::string& key) const;
+ void set_property(const std::string&, const std::string& value);
+
+ void set_data(void* data) { userdata_ = data; }
+ void* get_data() { return userdata_; }
+
+ IoPtr io_init(sg_size_t size, s4u::Io::OpType type);
+
+ IoPtr read_async(sg_size_t size);
+ sg_size_t read(sg_size_t size);
+
+ IoPtr write_async(sg_size_t size);
+ sg_size_t write(sg_size_t size);
+ kernel::resource::StorageImpl* get_impl() const { return pimpl_; }
+
+private:
+ Host* attached_to_ = nullptr;
+ kernel::resource::StorageImpl* const pimpl_;