nlib
nn::nlib::TextWriter クラスfinal

ストリームにテキストを書き込むクラスです。 [詳解]

#include "nn/nlib/TextWriter.h"

公開メンバ関数

errno_t Init () noexcept
 テキストライターを初期化します。 [詳解]
 
errno_t Open (OutputStream *stream) noexcept
 ストリームを与えてテキストライターをオープンします。 [詳解]
 
bool Write (wchar_t c) noexcept
 ストリームに1文字書き込みます。 [詳解]
 
bool Write (const wchar_t *str) noexcept
 ストリームに文字列を書き込みます。 [詳解]
 
bool Write (char c) noexcept
 ストリームに1文字書き込みます。 [詳解]
 
bool Write (const char *str) noexcept
 ストリームに文字列を書き込みます。 [詳解]
 
bool Write (nlib_utf16_t c) noexcept
 ストリームに1文字書き込みます。 [詳解]
 
bool Write (const nlib_utf16_t *str) noexcept
 ストリームに文字列を書き込みます。 [詳解]
 
bool Write (nlib_utf32_t c) noexcept
 ストリームに1文字書き込みます。 [詳解]
 
bool Write (const nlib_utf32_t *str) noexcept
 ストリームに文字列を書き込みます。 [詳解]
 
bool Flush () noexcept
 テキストライタとベースストリームをフラッシュします。 [詳解]
 
bool Close () noexcept
 テキストライタをクローズします。 [詳解]
 
errno_t GetErrorValue () const noexcept
 書き込み等が失敗した際に、エラーの原因を取得できます。 [詳解]
 
OutputStreamGetStream () noexcept
 テキストライタが書き込みを行うストリームを取得します。 [詳解]
 
bool WriteFormat (const wchar_t *fmt,...) noexcept
 ストリームに書式つき文字列を書き込みます。 [詳解]
 
bool WriteFormat (const char *fmt,...) noexcept
 ストリームに書式つき文字列を書き込みます。 [詳解]
 
void SetError (errno_t e) const noexcept
 エラー値を設定します。 [詳解]
 
 operator bool () const
 内部でエラーが発生していなければtrueを返します。
 
基本的なメンバ関数
 TextWriter () noexcept
 デフォルトコンストラクタです。
 
 ~TextWriter () noexcept
 デストラクタです。ストリームはクローズされません。
 
TextWriterassign (TextWriter &rhs, move_tag)
 swapを利用したムーブにより代入します。
 
 TextWriter (TextWriter &rhs, move_tag)
 swapを利用したムーブによりオブジェクトを構築します。
 
 TextWriter (TextWriter &&rhs)
 ムーブコンストラクタです。C++11の利用時に有効です。
 
TextWriteroperator= (TextWriter &&rhs)
 ムーブ代入演算子です。C++11の利用時に有効です。
 
void swap (TextWriter &rhs) noexcept
 オブジェクトの内容をスワップします。
 

詳解

ストリームにテキストを書き込むクラスです。

説明
ストリームへはUTF-8の文字列として出力されます。 また、BOMを付加することはありません。
改行文字については以下のように加工されます。
  • LFはそのまま出力されます。
  • CRLFとして出力されます。
  • CRLFLFとして出力されます。
サロゲートペアに関しては、上位サロゲートと下位サロゲートがペアにならなかった場合はエラー(EILSEQ)になります。
// OutputStreamにUTF-16/UTF-32の文字列をUTF-8に変換して書きこむ
// 実際には環境によってリテラル文字列のエンコーディングが異なることに注意
const wchar_t str[] = L"wide \r\nstring";
MemoryOutputStream ostr(....);
if (nlib_is_error(w.Init(&ostr))) { ERROR; }
if (nlib_is_error(w.Write(str))) { ERROR; }
if (nlib_is_error(w.Close())) { ERROR; }
// the result is "wide \nstring"
// BOMを書きこむ
w.Write(L'\xFEFF'); // UTF-8のBOMになる。
各種例:
exi/serializer/serializer.cpp, exi/simple1/simple1.cpp, exi/simple2/simple2.cpp, exi/textparser/textparser.cpp, misc/writefile/writefile.cpp, msgpack/jsonrpc/jsonrpc.cpp, msgpack/jsonrpc/server.cpp.

TextWriter.h20 行目に定義があります。

関数詳解

§ Close()

nn::nlib::TextWriter::Close ( )
noexcept

テキストライタをクローズします。

戻り値
成功した場合はtrue
説明
ベースストリームへの参照をクリアしてテキスライターをクローズし、ベースストリームを切り離します。 この操作ではベースストリームはクローズされません。

§ Flush()

nn::nlib::TextWriter::Flush ( )
noexcept

テキストライタとベースストリームをフラッシュします。

戻り値
成功した場合はtrue
説明
上位サロゲートだけを書き込んだ状態で呼び出された場合は、その上位サロゲートの書き込みは保留された状態になります。

§ GetErrorValue()

nn::nlib::TextWriter::GetErrorValue ( ) const
inlinenoexcept

書き込み等が失敗した際に、エラーの原因を取得できます。

戻り値
0エラーは発生していません。
EINVAL引数が間違っている。
EEXIST初期化を2重に行おうとした。
EBADF書き込みストリームが存在しない。
EIO何らかの原因でストリームへの書き込みに失敗した。
EILSEQ不正な文字を書き込もうとした。
ENOMEMメモリの動的確保に失敗した。

TextWriter.h37 行目に定義があります。

§ GetStream()

nn::nlib::TextWriter::GetStream ( )
inlinenoexcept

テキストライタが書き込みを行うストリームを取得します。

戻り値
ストリームへのポインタ

TextWriter.h38 行目に定義があります。

§ Init()

nn::nlib::TextWriter::Init ( )
noexcept

テキストライターを初期化します。

戻り値
成功した場合は0。既に初期化済みの場合はEALREADY
各種例:
msgpack/jsonrpc/jsonrpc.cpp, msgpack/jsonrpc/server.cpp.

§ Open()

nn::nlib::TextWriter::Open ( OutputStream stream)
noexcept

ストリームを与えてテキストライターをオープンします。

引数
[in]streamストリーム
戻り値
0成功した場合
EINVALストリームがNULLの場合
EEXIST既にオープン済みの場合
各種例:
msgpack/jsonrpc/jsonrpc.cpp, msgpack/jsonrpc/server.cpp.

§ SetError()

nn::nlib::TextWriter::SetError ( errno_t  e) const
inlinenoexcept

エラー値を設定します。

引数
[in]eエラー値
説明
エラーが設定されていない場合はe をエラー値として設定します。

TextWriter.h41 行目に定義があります。

§ Write() [1/8]

nn::nlib::TextWriter::Write ( wchar_t  c)
noexcept

ストリームに1文字書き込みます。

引数
[in]cワイド文字(UTF16/UTF32)
戻り値
成功した場合はtrue

§ Write() [2/8]

nn::nlib::TextWriter::Write ( const wchar_t *  str)
noexcept

ストリームに文字列を書き込みます。

引数
[in]strワイド文字列
戻り値
成功した場合はtrue

§ Write() [3/8]

nn::nlib::TextWriter::Write ( char  c)
noexcept

ストリームに1文字書き込みます。

引数
[in]cASCII文字
戻り値
成功した場合はtrue
説明
マルチバイト文字列を書きこむ場合は、1文字ずつ書きこむのではなく、文字列として書き込んでください。エラー(EILSEQ)になります。

§ Write() [4/8]

nn::nlib::TextWriter::Write ( const char *  str)
noexcept

ストリームに文字列を書き込みます。

引数
[in]strUTF-8の文字列
戻り値
成功した場合はtrue

§ Write() [5/8]

nn::nlib::TextWriter::Write ( nlib_utf16_t  c)
noexcept

ストリームに1文字書き込みます。

引数
[in]cUTF16の文字
戻り値
成功した場合はtrue
説明
上位サロゲートを書き込んだ場合は、続けて下位サロゲートを書き込まないとエラーになります。

§ Write() [6/8]

nn::nlib::TextWriter::Write ( const nlib_utf16_t str)
noexcept

ストリームに文字列を書き込みます。

引数
[in]strUTF-16文字列
戻り値
成功した場合はtrue

§ Write() [7/8]

nn::nlib::TextWriter::Write ( nlib_utf32_t  c)
noexcept

ストリームに1文字書き込みます。

引数
[in]cUTF32の文字
戻り値
成功した場合はtrue

§ Write() [8/8]

nn::nlib::TextWriter::Write ( const nlib_utf32_t str)
noexcept

ストリームに文字列を書き込みます。

引数
[in]strUTF-32文字列
戻り値
成功した場合はtrue

§ WriteFormat() [1/2]

nn::nlib::TextWriter::WriteFormat ( const wchar_t *  fmt,
  ... 
)
noexcept

ストリームに書式つき文字列を書き込みます。

引数
[in]fmt書式文字列
戻り値
成功した場合はtrue, 失敗した場合はfalse
説明
戻り値がfalseの場合、GetErrorValue()メンバ関数で取得できます。
各種例:
msgpack/jsonrpc/jsonrpc.cpp, msgpack/jsonrpc/server.cpp.

§ WriteFormat() [2/2]

nn::nlib::TextWriter::WriteFormat ( const char *  fmt,
  ... 
)
noexcept

ストリームに書式つき文字列を書き込みます。

引数
[in]fmt書式文字列
戻り値
成功した場合はtrue, 失敗した場合はfalse
説明
戻り値がfalseの場合、GetErrorValue()メンバ関数で取得できます。

このクラス詳解は次のファイルから抽出されました: