nlib
AsyncFileIo.h
[詳解]
1 
2 #pragma once
3 #ifndef INCLUDE_NN_NLIB_THREADING_ASYNCFILEIO_H_
4 #define INCLUDE_NN_NLIB_THREADING_ASYNCFILEIO_H_
5 
6 #include "nn/nlib/Config.h"
7 
8 NLIB_NAMESPACE_BEGIN
9 namespace threading {
10 
11 class AsyncFileIoService;
12 template <class R>
13 class Future;
14 
16  public:
17  enum Mode {
18  ASYNCFILEIO_READ = NLIB_FD_O_RDONLY,
19  ASYNCFILEIO_WRITE = NLIB_FD_O_WRONLY | NLIB_FD_O_CREAT | NLIB_FD_O_TRUNC
20  };
21  static bool HasNativeAsyncFileIo() NLIB_NOEXCEPT;
24  errno_t Init() NLIB_NOEXCEPT;
25  NLIB_CHECK_RESULT errno_t Open(const char* path,
26  int flags, int mode) NLIB_NOEXCEPT;
27  NLIB_CHECK_RESULT errno_t Open(const char* path, int flags) NLIB_NOEXCEPT {
28  return Open(path, flags, 0644);
29  }
31  NLIB_ALWAYS_INLINE nlib_fd GetFd() const NLIB_NOEXCEPT { return fd_; }
32  errno_t Close() NLIB_NOEXCEPT;
33  errno_t Read(Future<size_t>* future, void* buf, size_t nbytes, nlib_offset ofs,
35  errno_t Read(size_t* read_bytes, void* buf, size_t nbytes, nlib_offset ofs,
37  errno_t Write(Future<size_t>* future, const void* buf, size_t nbytes, nlib_offset ofs,
39  errno_t Write(size_t* write_bytes, const void* buf, size_t nbytes, nlib_offset ofs,
41  errno_t Cancel(AsyncFileIoService* ioservice) NLIB_NOEXCEPT;
42 
43  private:
44  nlib_fd fd_;
46 };
47 
48 struct AsyncFileIoServiceData;
50  public:
51  AsyncFileIoService() NLIB_NOEXCEPT : data_(NULL) {}
53  errno_t Init() NLIB_NOEXCEPT;
54 
55  private:
56  AsyncFileIoServiceData* data_;
58  friend class AsyncFileIo;
59 };
60 
61 } // namespace threading
62 NLIB_NAMESPACE_END
63 
64 #endif // INCLUDE_NN_NLIB_THREADING_ASYNCFILEIO_H_
#define NLIB_ALWAYS_INLINE
コンパイラに関数をインライン展開するように強く示します。
Definition: Platform_unix.h:69
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
Definition: Config.h:145
#define NLIB_FD_O_CREAT
nlib_fd_open()のflags 引数で使われます。
Definition: Platform.h:1693
#define NLIB_CHECK_RESULT
関数の呼び出し元が戻り値をチェックする必要があることを示します。
Definition: Platform_unix.h:74
非同期ファイルI/Oを管理するためのクラスです。
Definition: AsyncFileIo.h:49
nlib_fd GetFd() const noexcept
nlib_fdを取得します。
Definition: AsyncFileIo.h:31
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:61
bool Write(BinaryWriter *w, T x)
この関数テンプレートを特殊化することで、ユーザー定義クラスを書きこむことができます。 ...
Definition: BinaryWriter.h:116
#define NLIB_FD_O_WRONLY
nlib_fd_open()のflags 引数で使われます。
Definition: Platform.h:1672
int nlib_fd
(nlib独自の)ファイルディスクリプタで、32bit整数です。
Definition: Platform.h:1728
#define NLIB_FD_O_TRUNC
nlib_fd_open()のflags 引数で使われます。
Definition: Platform.h:1700
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Config.h:86
開発環境別の設定が書かれるファイルです。
別のスレッド実行の出力をスレッドセーフに取得するためのクラスです。C++11のstd::shared_futureに似ていま...
Definition: AsyncFileIo.h:13
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
Definition: Config.h:211
bool Read(BinaryReader *r, T *x)
この関数テンプレートを特殊化することで、ユーザー定義クラスに読み込むことができます。 ...
Definition: BinaryReader.h:152
int64_t nlib_offset
ファイルへのオフセットです。64bit整数です。
Definition: Platform.h:1727
非同期ファイルI/Oをラップしたクラスです。
Definition: AsyncFileIo.h:15
AsyncFileIoService() noexcept
コンストラクタです。
Definition: AsyncFileIo.h:51
#define NLIB_FD_O_RDONLY
nlib_fd_open()のflags 引数で使われます。
Definition: Platform.h:1665
int errno_t
intのtypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
Definition: NMalloc.h:24