|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2021 nono project ! 4: // Licensed under nono-license.txt ! 5: // ! 6: ! 7: #pragma once ! 8: ! 9: #include "header.h" ! 10: ! 11: // ディスクイメージの基本クラス ! 12: class DiskImage ! 13: { ! 14: public: ! 15: enum class Type { ! 16: Raw, // 生イメージ ! 17: }; ! 18: ! 19: public: ! 20: DiskImage(Type type_); ! 21: virtual ~DiskImage(); ! 22: ! 23: static DiskImage *Create(const std::string& pathname); ! 24: ! 25: // このディスクイメージのサイズと書き込み可能かどうかを返す。 ! 26: // Open() 前でも動作する。 ! 27: // 成功すれば 0、失敗なら errno をセットして - 1を返す。 ! 28: virtual int GetInfo(off_t *size, bool *w_ok) = 0; ! 29: ! 30: // このディスクイメージを実際のアクセス用にオープンする。 ! 31: // 失敗すれば warn() でエラーメッセージを表示して false を返す。 ! 32: virtual bool Open(bool read_only) = 0; ! 33: ! 34: // このディスクイメージの offset から size バイトを buf に読み出す ! 35: virtual bool Read(void *buf, off_t offset, size_t size) = 0; ! 36: ! 37: // このディスクイメージの offset から size バイトに buf を書き込む ! 38: virtual bool Write(const void *buf, off_t offset, size_t size) = 0; ! 39: ! 40: // このディスクイメージをクローズする ! 41: virtual void Close() = 0; ! 42: ! 43: // このディスクイメージのバイト数を返す。 ! 44: // オープン後のみ使用可能。 ! 45: virtual off_t GetSize() const = 0; ! 46: ! 47: // このディスクイメージの種別を返す ! 48: Type GetDiskImageType() const { return type; } ! 49: ! 50: // このディスクイメージのパス込みのファイル名を返す ! 51: const std::string& GetPathName() const { return pathname; } ! 52: ! 53: protected: ! 54: Type type {}; ! 55: ! 56: std::string pathname {}; ! 57: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.