--- nono/lib/mappedfile.h 2026/04/29 17:04:34 1.1.1.1 +++ nono/lib/mappedfile.h 2026/04/29 17:05:56 1.1.1.7 @@ -4,17 +4,27 @@ // Licensed under nono-license.txt // +// // ファイルを mmap して提供するクラス +// #pragma once #include "header.h" +#include "autofd.h" -class MappedFile +class MappedFile final { public: + // アクセスモード + // (enum class は字面が長くなるので手抜きしたい…) + using Mode = bool; + static const bool RW = false; + static const bool RdOnly = true; + + public: MappedFile(); - virtual ~MappedFile(); + ~MappedFile(); // ファイル名(パス名)を指定する。 void SetFilename(const std::string& filename); @@ -22,17 +32,12 @@ class MappedFile // エラーメッセージの表示名を変更する。 void SetDispname(const std::string& dispname); - // サイズの確定しているファイルを読み込み専用でオープンして mmap する。 - // ファイルがなければエラー。ROM とか用。 - uint8 *OpenRdOnly(off_t len); - // サイズの確定しているファイルを読み書き両用でオープンして mmap する。 // ファイルがなければ作成する。SRAM とか用。 - uint8 *OpenCreate(off_t len); - - // サイズの確定していないファイルを読み書き両用でオープンして mmap する。 - // ファイルがなければエラー。ディスクイメージ用。 - uint8 *OpenFile(); + uint8 *OpenCreate(off_t len) { + return OpenCreate(len, NULL, 0); + } + uint8 *OpenCreate(off_t len, const uint8 *data, uint datalen); // クローズする (デストラクタを呼ぶだけでもよい) void Close(); @@ -52,7 +57,7 @@ class MappedFile // ただのパス名だけでなくその場に応じたいい感じの表示にしたい。 std::string dispname {}; - int fd {}; + autofd fd {}; uint8 *mem {}; off_t memlen {}; };