nlib
nn::nlib::Base64Decoder クラスfinal

Base64のデコードを行います。Base64の各種変形版をサポートします。 [詳解]

#include "nn/nlib/Base64.h"

公開型

enum  CharOption
 Base64Encoder::CharOptionを参照してください。
 

公開メンバ関数

constexpr Base64Decoder () noexcept
 デフォルトコンストラクタです。
 
errno_t Init (CharOption char_option=kBase64Default) noexcept
 62番目、63番目の文字を指定してオブジェクトを初期化します。 [詳解]
 
errno_t StepDecode (size_t *written, void *dst, size_t dstsize, const char *src, size_t srcsize) noexcept
 Base64の分割デコードを行います。 [詳解]
 
template<size_t N>
errno_t StepDecode (size_t *written, nlib_byte_t(&dst)[N], const char *src, size_t srcsize) noexcept
 StepDecode(written, dst, N, src, srcsize)を実行します。
 
errno_t Close (size_t *written, void *dst, size_t dstsize) noexcept
 Base64の分割デコードを終了します。 [詳解]
 
template<size_t N>
errno_t Close (size_t *written, nlib_byte_t(&dst)[N]) noexcept
 Close(written, dst, N)を実行します。
 
 operator bool () const
 初期化済みでエラーが発生していなければtrueを返します。
 

静的公開メンバ関数

static size_t GetRequiredSize (size_t srcsize) noexcept
 データのデコードに必要な領域のサイズを計算します。 [詳解]
 
static errno_t Decode (size_t *written, void *dst, size_t dstsize, const char *src, CharOption char_option=kBase64Default) noexcept
 データを一括してデコードします。 [詳解]
 
template<size_t N>
static errno_t Decode (size_t *written, nlib_byte_t(&dst)[N], const char *src, CharOption char_option=kBase64Default) noexcept
 Decode(written, dst, N, src, srcsize, char_option)を実行します。
 
static errno_t Decode (UniquePtr< uint8_t[]> &dst, size_t *dstsize, const char *src, CharOption char_option=kBase64Default) noexcept
 データを一括してデコードします。 [詳解]
 
static errno_t DecodeInplace (size_t *written, char *src, CharOption char_option=kBase64Default) noexcept
 データをその場でデコードします。 [詳解]
 

詳解

Base64のデコードを行います。Base64の各種変形版をサポートします。

説明
このクラスはBase64の一括デコード、分割デコード、インプレイスの一括デコードをサポートします。 Base64の各種変形版はCharOption型の値を指定することで利用可能です。 改行やパディングを含む入力もデコード可能です。
一括デコードは以下のようなコードで利用可能です。
UniquePtr<uint8_t[]> dst;
size_t dstsize;
errno_t e = Base64Decoder::Decode(dst, &dstsize, src);
if (nlib_is_error(e)) { ERROR; }
分割デコードを行う場合は以下のようなコードになります。
Base64Decoder decoder;
....
errno_t MyStepDecode(nlib_byte_t** dst, size_t* dstsize, const char* src, size_t srcsize) {
size_t written;
errno_t e = decoder.StepDecode(&written, *dst, *dstsize, src, srcsize);
if (nlib_is_error(e)) { ERROR; }
*dst += written;
*dstsize -= written;
return 0;
}
errno_t MyCloseDecode(nlib_byte_t** dst, size_t* dstsize) {
size_t written;
errno_t e = decoder.Close(&written, *dst, *dstsize);
if (nlib_is_error(e)) { ERROR; }
*dst += written;
*dstsize -= written;
return 0;
}
参照
https://www.ietf.org/rfc/rfc2045.txt
オブジェクトの状態遷移
オブジェクトの状態遷移の概略は以下のとおりです。
dot_inline_dotgraph_1.png

Base64.h153 行目に定義があります。

関数詳解

◆ Close()

nn::nlib::Base64Decoder::Close ( size_t *  written,
void *  dst,
size_t  dstsize 
)
noexcept

Base64の分割デコードを終了します。

引数
[out]writtendstに書き込まれたバイト数
[out]dstデコードが格納されるバッファ
[in]dstsizedstのサイズ
戻り値
0成功した場合
EINVALwritten, dstNULLだった場合
EINVAL以前に何らかのエラーが発生している場合
ERANGEdstsizeが必要なサイズより小さかった場合
説明
dstは2バイト以上の領域が必要です。

◆ Decode() [1/2]

nn::nlib::Base64Decoder::Decode ( size_t *  written,
void *  dst,
size_t  dstsize,
const char *  src,
CharOption  char_option = kBase64Default 
)
inlinestaticnoexcept

データを一括してデコードします。

引数
[out]writtendstに出力されたデータサイズ
[out]dstデコードされたデータが出力されるバッファ
[in]dstsizedstのサイズ
[in]srcエンコードされた文字列
[in]char_option62番目、63番目の文字を指定
戻り値
0ならば成功

Base64.h184 行目に定義があります。

◆ Decode() [2/2]

nn::nlib::Base64Decoder::Decode ( UniquePtr< uint8_t[]> &  dst,
size_t *  dstsize,
const char *  src,
CharOption  char_option = kBase64Default 
)
inlinestaticnoexcept

データを一括してデコードします。

引数
[out]dstデコードされたデータ
[out]dstsizedstのサイズ
[in]srcエンコードされた文字列
[in]char_option62番目、63番目の文字を指定
戻り値
0成功した場合
EINVALdstsize, srcNULLだった場合
ENOMEMメモリの確保に失敗した場合
EILSEQ不正な文字があった場合

Base64.h248 行目に定義があります。

◆ DecodeInplace()

nn::nlib::Base64Decoder::DecodeInplace ( size_t *  written,
char *  src,
CharOption  char_option = kBase64Default 
)
staticnoexcept

データをその場でデコードします。

引数
[out]writtensrcに書き込まれたサイズ
[in,out]srcエンコードされた文字列、及びデコードされたデータ
[in]char_option62番目、63番目の文字を指定
戻り値
0成功した場合
EINVALwritten, srcNULLだった場合
EILSEQ不正な文字があった場合
説明
EILSEQを返す場合は途中までデコードできた場合でもwrittenには0が書き込まれます。

◆ GetRequiredSize()

nn::nlib::Base64Decoder::GetRequiredSize ( size_t  srcsize)
inlinestaticnoexcept

データのデコードに必要な領域のサイズを計算します。

引数
[in]srcsizeデコードするデータのサイズ
戻り値
((srcsize + 3) / 4) * 3;を返します。

Base64.h181 行目に定義があります。

◆ Init()

nn::nlib::Base64Decoder::Init ( CharOption  char_option = kBase64Default)
noexcept

62番目、63番目の文字を指定してオブジェクトを初期化します。

引数
[in]char_option62番目、63番目の文字を指定
戻り値
0成功した場合
EALREADY既に初期化済みでエラーが発生していない場合

◆ StepDecode()

nn::nlib::Base64Decoder::StepDecode ( size_t *  written,
void *  dst,
size_t  dstsize,
const char *  src,
size_t  srcsize 
)
noexcept

Base64の分割デコードを行います。

引数
[out]writtendstに書き込まれたバイト数
[out]dstデコードが格納されるバッファ
[in]dstsizedstのサイズ
[in]srcデコードされるデータ
[in]srcsizesrcのサイズ
戻り値
0成功した場合
EINVALwritten, dst, srcNULLだった場合
EINVAL以前に何らかのエラーが発生している場合
ERANGEdstsizeが必要なサイズより小さかった場合
EILSEQ不正な文字があった場合
説明
dstに必要なバッファ・サイズは、GetRequiredSize(srcsize)で計算することができます。 EILSEQを返す場合は途中までデコードできた場合でもwrittenには0が書き込まれます。

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