nlib
nn::nlib::Base64InputStream クラスfinal

Base64でエンコードされたデータを読み込むためのクラスです。 [詳解]

#include "nn/nlib/Base64InputStream.h"

+ nn::nlib::Base64InputStream の継承関係図

公開メンバ関数

コンストラクタ、デストラクタ、及び初期化
constexpr Base64InputStream () noexcept
 デフォルトコンストラクタです。
 
errno_t Init (CharOption char_option) noexcept
 オブジェクトを初期化します。引数についてはBase64Decoder::CharOptionをご覧ください。
 
errno_t Init () noexcept
 Init(Base64Decoder::kBase64Default)を実行します。
 
virtual ~Base64InputStream () noexcept override
 デストラクタです。
 
- 基底クラス nn::nlib::InputConverterStream に属する継承公開メンバ関数
errno_t SetStream (InputStream *istr) noexcept
 変換前のデータを読み込む入力ストリームを設定します。 [詳解]
 
InputStreamGetStream () const noexcept
 変換前のデータを読み込む入力ストリームを取得します。 [詳解]
 
- 基底クラス nn::nlib::InputStream に属する継承公開メンバ関数
errno_t GetErrorValue () const noexcept
 エラー値を取得します。 [詳解]
 
size_t Pos () const noexcept
 ストリーム上の現在位置を返します。 [詳解]
 
uint64_t Pos64 () const noexcept
 ストリーム上の現在位置を64bit値で返します。 [詳解]
 
bool IsEos () noexcept
 ストリームを最後まで読み終えている場合trueを返します。最後まで読み終えていない場合やエラーが発生している場合はfalseを返します。 [詳解]
 
int Read () noexcept
 ストリームから1バイトを読み込みます。 [詳解]
 
int Peek () noexcept
 ストリームを消費せずに次の1バイトを読み込みます。 [詳解]
 
size_t Skip (size_t nbytes) noexcept
 nbytes を読み飛ばします。 [詳解]
 
size_t Read (void *ptr, size_t nbytes) noexcept
 ptr で示されるメモリにnbytes 読み込みます。 [詳解]
 
template<size_t N>
size_t Read (nlib_byte_t(&buf)[N]) noexcept
 上記関数のテンプレートオーバーロードです。
 
bool Close () noexcept
 ストリームを閉じます。成功した場合にはtrueを返します。 [詳解]
 
bool Mark (size_t readlimit) noexcept
 現在の読み込み位置にGoBackToMark()で戻ることができるように設定します。 [詳解]
 
bool GoBackToMark () noexcept
 最後にMark()を実行した読み込み位置に戻ります。 [詳解]
 
bool IsMarkSupported () const noexcept
 このストリームがMark()GoBackToMark()をサポートしていればtrueを返します。
 
 operator bool () const
 オブジェクトが初期化済みで内部でエラーが発生していなければtrue、発生していればfalseを返します。
 
constexpr InputStream () noexcept
 デフォルトコンストラクタです。 派生クラスから呼び出されます。
 
virtual ~InputStream () noexcept
 デストラクタです。 派生クラスから呼び出されます。
 

その他の継承メンバ

- 基底クラス nn::nlib::InputStream に属する継承限定公開メンバ関数
void SetBuffer (void *p, size_t nbytes, bool is_mark_supported, bool is_buf_readonly) noexcept
 InputStreamが持つバッファを設定します。 [詳解]
 
void SetError (errno_t e) const noexcept
 InputStreamにエラーを設定します。 [詳解]
 

詳解

Base64でエンコードされたデータを読み込むためのクラスです。

説明
InputConverterStreamを基底クラスに持ちます。 InputStreamとして動作する際に読み込んだデータをBase64でデコードして返します。 InputConverterStream::SetStream()関数で、Base64文字列を読み込むストリームを設定して利用します。
変換される文字以外の文字が読み込まれた場合、以下のようになります。
  • CR, LF, スペース, 水平タブの場合はスキップ
  • それ以外の場合はエラー(EILSEQ)
パディング文字'='が不足している場合もエラー(EILSEQ)になります。
以下がコード例です。
const char* base64 = "RGF0YSB0byBlbmNvZGUgc3RlcDEKRGF0YSB0byBlbmNvZGUgc3RlcDIK";
errno_t e = base64_stream.Init();
SUCCEED_IF(e == 0);
e = base64_stream.SetStream(&is);
SUCCEED_IF(e == 0);
char buf[128];
size_t nread = base64_stream.Read(buf, 128);
SUCCEED_IF(nread > 0);
buf[nread] = '\0'; // nread not checked for simplicity
(void)base64_stream.Close();
(void)is.Close();
nlib_printf("converted:\n%s", buf);
/*
Output:
Data to encode step1
Data to encode step2
*/
参照
https://www.ietf.org/rfc/rfc2045.txt (RFC2045, Base64)
オブジェクトの状態遷移
オブジェクトの状態遷移の概略は以下のとおりです。
dot_inline_dotgraph_3.png

Base64InputStream.h24 行目に定義があります。


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