--- nono/host/diskimage.h 2026/04/29 17:05:30 1.1.1.4 +++ nono/host/diskimage.h 2026/04/29 17:06:02 1.1.1.5 @@ -6,34 +6,19 @@ #pragma once -#include "nono.h" +#include "object.h" #include "autofd.h" #include #include -// ディスクイメージを実際に処理するドライバ -// (DiskImage クラスの下請けになる) -class DiskImageDriver -{ - public: - explicit DiskImageDriver(const std::string& pathname_); - virtual ~DiskImageDriver(); - - virtual int IsWriteable() const = 0; - virtual bool Open(bool read_only) = 0; - virtual void Close() = 0; - virtual off_t GetSize() const = 0; - virtual bool Read(void *buf, off_t offset, size_t size) = 0; - virtual bool Write(const void *buf, off_t offset, size_t size) = 0; - - protected: - const std::string& pathname; -}; +class DiskImageDriver; // ディスクイメージ -class DiskImage +class DiskImage : public Object { private: + using inherited = Object; + // Copy-on-Write キャッシュのブロックサイズ static const uint BLKSIZE = 4096; @@ -41,7 +26,14 @@ class DiskImage public: DiskImage(); - virtual ~DiskImage(); + ~DiskImage() override; + + // ログ名を設定する。 + // 歴史的経緯により、コンストラクタではなく後から設定する。 + // Object::SetName() は protected だがここでは public にする。 + void SetName(const std::string& name) override; + + void SetLogLevel(int loglevel_) override; // パス名を指定して、下位ドライバをオープン。 // コンストラクタ後最初に実行すること。 @@ -87,7 +79,7 @@ class DiskImage std::string pathname {}; - std::unique_ptr driver {}; + std::unique_ptr driver /*{}*/; // Copy-on-Write モード bool cow_enable {};