|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: // ファイルを mmap して提供するクラス
8:
9: #pragma once
10:
11: #include "header.h"
1.1.1.2 root 12: #include "autofd.h"
1.1 root 13:
14: class MappedFile
15: {
16: public:
1.1.1.3 ! root 17: // アクセスモード
! 18: // (enum class は字面が長くなるので手抜きしたい…)
! 19: using Mode = bool;
! 20: static const bool RW = false;
! 21: static const bool RdOnly = true;
! 22:
! 23: public:
1.1 root 24: MappedFile();
25: virtual ~MappedFile();
26:
27: // ファイル名(パス名)を指定する。
28: void SetFilename(const std::string& filename);
29:
30: // エラーメッセージの表示名を変更する。
31: void SetDispname(const std::string& dispname);
32:
33: // サイズの確定しているファイルを読み書き両用でオープンして mmap する。
34: // ファイルがなければ作成する。SRAM とか用。
35: uint8 *OpenCreate(off_t len);
36:
37: // クローズする (デストラクタを呼ぶだけでもよい)
38: void Close();
39:
40: // mmap されている領域の長さを返す。(ファイルサイズと同じとは限らない)
41: off_t GetMemSize() const { return memlen; }
42:
43: private:
44: // ファイルサイズをチェック
45: bool CheckFilesize() const;
46:
47: // パス名
48: std::string filename {};
49:
50: // 表示名
51: // エラー表示をほぼこちら側で行うため、
52: // ただのパス名だけでなくその場に応じたいい感じの表示にしたい。
53: std::string dispname {};
54:
1.1.1.2 root 55: autofd fd {};
1.1 root 56: uint8 *mem {};
57: off_t memlen {};
58: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.