nlib
FileOutputStream.h
[詳解]
1 
2 #pragma once
3 #ifndef INCLUDE_NN_NLIB_FILEOUTPUTSTREAM_H_
4 #define INCLUDE_NN_NLIB_FILEOUTPUTSTREAM_H_
5 
6 #include "nn/nlib/OutputStream.h"
7 
8 NLIB_NAMESPACE_BEGIN
9 
11  void* buf;
12  size_t buffer_size;
13 
14  public:
15  NLIB_CEXPR FileOutputStreamSettings() NLIB_NOEXCEPT : buf(NULL), buffer_size(4096) {}
16  NLIB_CEXPR FileOutputStreamSettings(void* buf_, size_t buffer_size_) NLIB_NOEXCEPT
17  : buf(buf_),
18  buffer_size(buffer_size_) {}
19 };
20 
22  public:
24  buf_(NULL),
25  buf_size_(0),
26  is_internal_buffer_(false) {}
30  return this->Init(settings);
31  }
33  NLIB_CHECK_RESULT errno_t Open(const char* filename,
34  int flags, int mode) NLIB_NOEXCEPT NLIB_NONNULL;
35  NLIB_CHECK_RESULT errno_t Open(const char* filename) NLIB_NOEXCEPT {
36  return Open(filename, NLIB_FD_O_WRONLY | NLIB_FD_O_CREAT | NLIB_FD_O_TRUNC, 0644);
37  }
38  NLIB_CHECK_RESULT errno_t Open(const char* filename, int flags) NLIB_NOEXCEPT {
39  return Open(filename, flags, 0644);
40  }
41  NLIB_CHECK_RESULT errno_t Open(const wchar_t* filename,
42  int flags, int mode) NLIB_NOEXCEPT NLIB_NONNULL;
43  NLIB_CHECK_RESULT errno_t Open(const wchar_t* filename, int flags) NLIB_NOEXCEPT {
44  return Open(filename, flags, 0644);
45  }
46  NLIB_CHECK_RESULT errno_t Open(const wchar_t* filename) NLIB_NOEXCEPT {
47  return Open(filename, NLIB_FD_O_WRONLY | NLIB_FD_O_CREAT | NLIB_FD_O_TRUNC, 0644);
48  }
50  nlib_fd GetFd() const NLIB_NOEXCEPT { return fd_; }
51 
52  private:
53  virtual bool PushBuffer_(const void* p, size_t nbytes,
54  bool do_flush) NLIB_NOEXCEPT NLIB_OVERRIDE;
55  virtual bool Close_() NLIB_NOEXCEPT NLIB_OVERRIDE;
56  virtual bool WriteGather_(const nlib_fd_iovec* iov, int iovcnt) NLIB_NOEXCEPT NLIB_OVERRIDE;
57 
58  private:
59  nlib_fd fd_;
60  unsigned char* buf_;
61  size_t buf_size_;
62  bool is_internal_buffer_;
64 };
65 
66 NLIB_NAMESPACE_END
67 
68 #endif // INCLUDE_NN_NLIB_FILEOUTPUTSTREAM_H_
constexpr FileOutputStreamSettings() noexcept
デフォルトコンストラクタです。デフォルト値を設定します。
#define NLIB_OVERRIDE
利用可能であればoverrideが定義されます。そうでない場合は空文字列です。
Definition: Config.h:210
ファイルストリームの設定情報を格納する構造体です。
#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
void * buf
バッファのポインタです。
nlib_fd GetFd() const noexcept
ファイルディスクリプタを返します。
#define NLIB_FD_INVALID
無効なファイルディスクリプタを定義したマクロです。
Definition: Platform.h:1729
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:61
size_t buffer_size
バッファサイズです。
errno_t Init() noexcept
ストリームをデフォルトの設定で初期化します。
#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
#define NLIB_CEXPR
利用可能であればconstexprが定義されます。そうでない場合は空文字列です。
Definition: Config.h:80
FileOutputStream() noexcept
デフォルトコンストラクタです。更にInit()でバッファを設定して初期化する必要があります。 ...
constexpr FileOutputStreamSettings(void *buf_, size_t buffer_size_) noexcept
それぞれのデータメンバを設定します。
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
Definition: Config.h:211
出力ストリームの基底クラスを定義しています。
#define NLIB_NONNULL
全ての引数にNULLを指定することができないことを示します。
Definition: Platform_unix.h:76
出力ストリームの基底クラスです。このクラスを実体化することはできません。
Definition: OutputStream.h:17
int errno_t
intのtypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
Definition: NMalloc.h:24