3 #ifndef INCLUDE_NN_NLIB_BASE64_H_ 4 #define INCLUDE_NN_NLIB_BASE64_H_ 13 BASE64_PLUS_SLASH = 0,
22 BASE64_DEFAULT = BASE64_PLUS_SLASH,
23 BASE64_URL_SAFE = BASE64_MINUS_UNDERSCORE
28 return ((srcsize + 2) / 3) * 4 + 1;
30 static errno_t Encode(
char* dst,
42 return Encode(dst, N, src, srcsize, char_option, padding);
44 #ifdef NLIB_CXX11_DEFAULT_TEMPLATE_ARGUMENT_FOR_FUNCTION_TEMPLATES 45 template<
class DUMMY =
void>
53 size_t dstsize = GetRequiredSize(srcsize);
55 char* p =
new (std::nothrow)
char[dstsize];
56 if (!p)
return ENOMEM;
57 errno_t e = Encode(p, dstsize, src, srcsize, char_option, padding);
81 size_t srcsize) NLIB_NOEXCEPT {
82 return StepEncode(written, dst, N, src, srcsize);
95 bool padding) NLIB_NOEXCEPT {
96 return Close(written, dst, N, padding);
109 BASE64_PLUS_SLASH = 0,
111 BASE64_MINUS_UNDERSCORE,
113 BASE64_UNDERSCORE_COLON,
114 BASE64_UNDERSCORE_MINUS,
115 BASE64_DOT_UNDERSCORE,
116 BASE64_EXCLAMATION_MINUS,
118 BASE64_DEFAULT = BASE64_PLUS_SLASH,
119 BASE64_URL_SAFE = BASE64_MINUS_UNDERSCORE
124 return ((srcsize + 3) / 4) * 3;
130 CharOption char_option = BASE64_DEFAULT) NLIB_NOEXCEPT {
131 return Decode_(written, dst, dstsize, src,
nlib_strlen(src), char_option);
137 CharOption char_option = BASE64_DEFAULT) NLIB_NOEXCEPT {
138 return Decode_(written, dst, N, src,
nlib_strlen(src), char_option);
140 #ifdef NLIB_CXX11_DEFAULT_TEMPLATE_ARGUMENT_FOR_FUNCTION_TEMPLATES 141 template<
class DUMMY =
void>
144 size_t* dstsize,
const char* src,
145 CharOption char_option = BASE64_DEFAULT) NLIB_NOEXCEPT {
148 size_t dstsize_ = GetRequiredSize(srcsize);
150 uint8_t* p =
new (std::nothrow) uint8_t[dstsize_];
151 if (!p)
return ENOMEM;
153 errno_t e = Decode_(&written, p, dstsize_, src, srcsize, char_option);
182 size_t srcsize) NLIB_NOEXCEPT {
183 return StepDecode(written, dst, N, src, srcsize);
192 uint8_t (&dst)[N]) NLIB_NOEXCEPT {
193 return Close(written, dst, N);
198 static errno_t Decode_(
size_t* written,
207 #if defined(NLIB_SIMD) && defined(NLIB_LITTLE_ENDIAN) 216 #endif // INCLUDE_NN_NLIB_BASE64_H_ static errno_t Decode(size_t *written, uint8_t(&dst)[N], const char *src, CharOption char_option=BASE64_DEFAULT) noexcept
Decode(written, dst, N, src, srcsize, char_option)を実行します。
errno_t StepEncode(size_t *written, char(&dst)[N], const void *src, size_t srcsize) noexcept
StepEncode(written, dst, N, src, srcsize)を実行します。
CharOption
Base64Encoder::CharOptionを参照してください。
62番目の文字に'-'、63番目の文字に'_'を指定します。
~Base64Encoder() noexcept
デストラクタです。
62番目の文字に'!'、63番目の文字に'-'を指定します。
Base64のデコードを行います。Base64の各種変形版をサポートします。
#define NLIB_SAFE_BOOL(class_name, exp)
クラス内に安全なoperator bool()を定義します。 可能であればC++11のexplicit boolを利用します。 ...
~Base64Decoder() noexcept
デストラクタです。
static errno_t Encode(char(&dst)[N], const void *src, size_t srcsize, CharOption char_option=BASE64_DEFAULT, bool padding=false) noexcept
Encode(dst, N, src, srcsize, char_option, padding)を実行します。
static errno_t Decode(UniquePtr< uint8_t[]> &dst, size_t *dstsize, const char *src, CharOption char_option=BASE64_DEFAULT) noexcept
データを一括してデコードします。
UniquePtrはポインタの所有権を保持し、UniquePtrがスコープから出るときにデストラクタでポインタをDELで指...
std::unique_ptrに相当するクラスが定義されています。
CharOption
Base64の62番目と63番目の文字のバリエーションを指定できます。
errno_t Close(size_t *written, char(&dst)[N], bool padding) noexcept
Base64Encoder::Close(written, dst, N, padding)を実行します。
62番目の文字に'.'、63番目の文字に'_'を指定します。
Base64のエンコードを行います。Base64の各種変形版をサポートします。
errno_t StepDecode(size_t *written, uint8_t(&dst)[N], const char *src, size_t srcsize) noexcept
StepDecode(written, dst, N, src, srcsize)を実行します。
62番目の文字に'_'、63番目の文字に'-'を指定します。
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
static size_t GetRequiredSize(size_t srcsize) noexcept
データのデコードに必要な領域のサイズを計算します。
static errno_t Decode(size_t *written, uint8_t *dst, size_t dstsize, const char *src, CharOption char_option=BASE64_DEFAULT) noexcept
データを一括してデコードします。
static errno_t Encode(UniquePtr< char[]> &dst, const void *src, size_t srcsize, CharOption char_option=BASE64_DEFAULT, bool padding=false) noexcept
データを一括してエンコードします。
62番目の文字に'+'、63番目の文字に'-'を指定します。
62番目の文字に'_'、63番目の文字に':'を指定します。
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
Base64Decoder() noexcept
デフォルトコンストラクタです。
static size_t GetRequiredSize(size_t srcsize) noexcept
データのエンコードに必要な領域のサイズを計算します。
62番目の文字に'.'、63番目の文字に'-'を指定します。
Base64Encoder() noexcept
デフォルトコンストラクタです。