#pragma once #include namespace hex::plugin::builtin { class MemoryFileProvider : public hex::prv::Provider { public: explicit MemoryFileProvider() = default; ~MemoryFileProvider() override = default; [[nodiscard]] bool isAvailable() const override { return true; } [[nodiscard]] bool isReadable() const override { return true; } [[nodiscard]] bool isWritable() const override { return !this->m_readOnly; } [[nodiscard]] bool isResizable() const override { return !this->m_readOnly; } [[nodiscard]] bool isSavable() const override { return this->m_name.empty(); } [[nodiscard]] bool isSavableAsRecent() const override { return false; } [[nodiscard]] bool open() override; void close() override { } void readRaw(u64 offset, void *buffer, size_t size) override; void writeRaw(u64 offset, const void *buffer, size_t size) override; [[nodiscard]] u64 getActualSize() const override { return this->m_data.size(); } void resizeRaw(u64 newSize) override; void insertRaw(u64 offset, u64 size) override; void removeRaw(u64 offset, u64 size) override; void save() override; [[nodiscard]] std::string getName() const override; [[nodiscard]] std::vector getDataDescription() const override { return { }; } std::vector getMenuEntries() override; [[nodiscard]] std::string getTypeName() const override { return "hex.builtin.provider.mem_file"; } [[nodiscard]] std::pair getRegionValidity(u64 address) const override; void loadSettings(const nlohmann::json &settings) override; [[nodiscard]] nlohmann::json storeSettings(nlohmann::json settings) const override; void setReadOnly(bool readOnly) { this->m_readOnly = readOnly; } private: void renameFile(); private: std::vector m_data; std::string m_name; bool m_readOnly = false; }; }