nlib
TextWriter.h
[詳解]
1 
2 #pragma once
3 #ifndef INCLUDE_NN_NLIB_TEXTWRITER_H_
4 #define INCLUDE_NN_NLIB_TEXTWRITER_H_
5 
6 #include "nn/nlib/Config.h"
7 #include "nn/nlib/Swap.h"
8 
9 NLIB_NAMESPACE_BEGIN
10 
11 class OutputStream;
12 
13 // code snippets:
14 // TextWriter writer;
15 // if (writer.Init() != 0 || writer.Open(&stream) != 0) { error; }
16 // # note that wide characters(UTF16/UTF32) are converted into UTF8
17 // if (!writer.Write(....)) { error; }
18 // if (!writer.Flush()) { error; }
19 // if (!writer.Close()) { error; }
21  public:
24  NLIB_MOVE_MEMBER_HELPER_2(TextWriter, stream_, errno_); // NOLINT
25  errno_t Init() NLIB_NOEXCEPT;
26  errno_t Open(OutputStream* stream) NLIB_NOEXCEPT;
27  bool Write(wchar_t c) NLIB_NOEXCEPT;
28  bool Write(const wchar_t* str) NLIB_NOEXCEPT NLIB_NONNULL;
29  bool Write(char c) NLIB_NOEXCEPT;
30  bool Write(const char* str) NLIB_NOEXCEPT NLIB_NONNULL;
32  bool Write(const nlib_utf16_t* str) NLIB_NOEXCEPT NLIB_NONNULL;
34  bool Write(const nlib_utf32_t* str) NLIB_NOEXCEPT NLIB_NONNULL;
35  bool Flush() NLIB_NOEXCEPT;
36  bool Close() NLIB_NOEXCEPT;
37  errno_t GetErrorValue() const NLIB_NOEXCEPT { return errno_; }
38  OutputStream* GetStream() NLIB_NOEXCEPT { return stream_; }
39  bool WriteFormat(_Printf_format_string_ const wchar_t* fmt, ...) NLIB_NOEXCEPT;
40  bool WriteFormat(_Printf_format_string_ const char* fmt, ...) NLIB_NOEXCEPT;
41  void SetError(errno_t e) const NLIB_NOEXCEPT {
42  if (errno_ == 0) errno_ = e;
43  }
44 
45  void swap(TextWriter& rhs) NLIB_NOEXCEPT {
46  using std::swap;
47  swap(stream_, rhs.stream_);
48  swap(errno_, rhs.errno_);
49  swap(cr_, rhs.cr_);
50  }
51  NLIB_SAFE_BOOL(TextWriter, GetErrorValue() == 0)
52 
53  private:
54  NLIB_VIS_HIDDEN bool Write_(const char* str, size_t len) NLIB_NOEXCEPT;
55 
56  private:
57  OutputStream* stream_;
58  mutable ErrnoT errno_;
59  unsigned char cr_;
60  unsigned char utf8idx_;
61  unsigned char utf16idx_;
62  union {
63  char utf8[5];
64  nlib_utf16_t utf16[3];
65  } buf_;
66 
68 };
69 
70 NLIB_NAMESPACE_END
71 
72 NLIB_DEFINE_STD_SWAP(::nlib_ns::TextWriter)
73 
74 #endif // INCLUDE_NN_NLIB_TEXTWRITER_H_
errno_t GetErrorValue() const noexcept
書き込み等が失敗した際に、エラーの原因を取得できます。
Definition: TextWriter.h:37
OutputStream * GetStream() noexcept
テキストライタが書き込みを行うストリームを取得します。
Definition: TextWriter.h:38
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
Definition: Config.h:145
#define NLIB_SAFE_BOOL(class_name, exp)
クラス内に安全なoperator bool()を定義します。 可能であればC++11のexplicit boolを利用します。 ...
Definition: Config.h:160
#define NLIB_VIS_HIDDEN
関数やクラス等のシンボルをライブラリの外部に公開しません。
Definition: Platform_unix.h:60
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:61
bool Write(BinaryWriter *w, T x)
この関数テンプレートを特殊化することで、ユーザー定義クラスを書きこむことができます。 ...
Definition: BinaryWriter.h:116
uint32_t nlib_utf32_t
char32_tが利用できる場合はchar32_tに、そうでない場合はuint32_tにtypedefされます。 ...
Definition: Config.h:539
uint16_t nlib_utf16_t
char16_tが利用できる場合はchar16_tに、そうでない場合はuint16_tにtypedefされます。 ...
Definition: Config.h:538
errno_tをラップするクラスです。Visual Studioのデバッガ上での表示を改善します。
Definition: Config.h:474
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Config.h:86
開発環境別の設定が書かれるファイルです。
void swap(TextWriter &rhs) noexcept
オブジェクトの内容をスワップします。
Definition: TextWriter.h:45
~TextWriter() noexcept
デストラクタです。ストリームはクローズされません。
Definition: TextWriter.h:23
ストリームにテキストを書き込むクラスです。
Definition: TextWriter.h:20
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
Definition: Config.h:211
void SetError(errno_t e) const noexcept
エラー値を設定します。
Definition: TextWriter.h:41
#define NLIB_NONNULL
全ての引数にNULLを指定することができないことを示します。
Definition: Platform_unix.h:76
出力ストリームの基底クラスです。このクラスを実体化することはできません。
Definition: OutputStream.h:17
int errno_t
intのtypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
Definition: NMalloc.h:24