MGL(Win32)
読み取り中…
検索中…
一致する文字列を見つけられません
mgl_file_throwing_handle.h
[詳解]
1// SPDX-License-Identifier: Zlib
2/* ------------------------------------------------------------------------- */
9/* ------------------------------------------------------------------------- */
10
11#ifndef INCGUARD_MGL_FILE_THROWING_HANDLE_H_1612516463
12#define INCGUARD_MGL_FILE_THROWING_HANDLE_H_1612516463
13
15
16namespace MGL::File
17{
20{
21public:
22 /* ------------------------------------------------------------------------- */
26 /* ------------------------------------------------------------------------- */
27 constexpr ThrowingHandle() noexcept
28 : _work(nullptr)
29 {
30 }
31
32 ThrowingHandle(const PathView &path, OpenMode mode = OpenMode::Read);
33 void Open(const PathView &path, OpenMode mode = OpenMode::Read);
34 void Close();
35
36 /* ------------------------------------------------------------------------- */
42 /* ------------------------------------------------------------------------- */
43 [[nodiscard]] constexpr bool IsOpen() const noexcept
44 {
45 return (_work) ? _work->IsOpen() : false;
46 }
47
48 size_t Read(void *buffer, size_t size);
49 size_t Write(const void *buffer, size_t size);
50 size_t Seek(SeekType seekType, int32_t offset);
51 size_t Seek(SeekType seekType, size_t offset);
52 size_t Skip(size_t size);
53 [[nodiscard]] size_t GetOffset();
54 [[nodiscard]] bool IsEOF();
55 [[nodiscard]] size_t GetSize();
56
57 // コピー禁止
58 ThrowingHandle(const ThrowingHandle &) = delete;
59 ThrowingHandle &operator=(const ThrowingHandle &) = delete;
60
61 /* ------------------------------------------------------------------------- */
66 /* ------------------------------------------------------------------------- */
68 : _work(std::move(other._work))
69 {
70 other._work.reset();
71 }
72
73 /* ------------------------------------------------------------------------- */
78 /* ------------------------------------------------------------------------- */
80 {
81 if (this != &other)
82 {
83 Close();
84
85 _work = std::move(other._work);
86
87 other._work.reset();
88 }
89
90 return *this;
91 }
92
93private:
94 AccessWorkPtr _work;
95 Result _result;
96};
97} // namespace MGL::File
98#endif // INCGUARD_MGL_FILE_THROWING_HANDLE_H_1612516463
99
100// vim: et ts=4 sw=4 sts=4
文字列の参照のみを行うファイルパスクラス
Definition mgl_file_path_view.h:20
例外を発生させるファイルハンドルクラス
Definition mgl_file_throwing_handle.h:20
bool IsEOF()
ファイルストリームが終端に達しているかを取得
Definition mgl_file_throwing_handle.cc:193
size_t GetOffset()
ストリーム位置を取得
Definition mgl_file_throwing_handle.cc:172
void Close()
ファイルをクローズ
Definition mgl_file_throwing_handle.cc:57
ThrowingHandle & operator=(ThrowingHandle &&other) noexcept
ムーブ代入演算
Definition mgl_file_throwing_handle.h:79
constexpr ThrowingHandle() noexcept
コンストラクタ
Definition mgl_file_throwing_handle.h:27
size_t Seek(SeekType seekType, int32_t offset)
ストリーム位置を設定
Definition mgl_file_throwing_handle.cc:123
void Open(const PathView &path, OpenMode mode=OpenMode::Read)
ファイルをオープン
Definition mgl_file_throwing_handle.cc:40
constexpr bool IsOpen() const noexcept
ファイルがオープンされているかを取得
Definition mgl_file_throwing_handle.h:43
ThrowingHandle(ThrowingHandle &&other) noexcept
ムーブコンストラクタ
Definition mgl_file_throwing_handle.h:67
size_t Skip(size_t size)
ストリーム位置をスキップ
Definition mgl_file_throwing_handle.cc:159
size_t GetSize()
オープンしているファイルのサイズを取得
Definition mgl_file_throwing_handle.cc:213
STL::unique_ptr< AccessWork > AccessWorkPtr
ファイルアクセスのためのワークのポインタ型
Definition mgl_file_access_work.h:130
SeekType
シークタイプ
Definition mgl_file_defs.h:63
OpenMode
オープンモード
Definition mgl_file_defs.h:48
MGL ファイルマウンタ