3 #ifndef INCLUDE_NN_NLIB_MSGPACK_MPREADER_H_
4 #define INCLUDE_NN_NLIB_MSGPACK_MPREADER_H_
15 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
16 #undef NLIB_VIS_PUBLIC
17 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT
25 bool MpRead(MpReader* obj, T* v);
35 : maxArraySize(max_array_size_),
36 maxMapSize(max_map_size_),
37 maxRawSize(max_raw_size_) {}
40 maxRawSize(1024 * 512) {}
60 static bool Read(
MpObject* obj,
const void* p,
size_t n) NLIB_NOEXCEPT NLIB_NONNULL {
64 if (m_ErrorValue == 0) m_ErrorValue = e;
75 return this->Convert_(v);
85 bool Read(
char (&v)[n]) NLIB_NOEXCEPT {
86 return this->
Read(&v[0], n);
88 template <
class T,
size_t n>
90 return this->
Read(&v[0], n);
98 return this->Read_(&obj);
102 NLIB_VIS_PUBLIC bool CheckString(const
char* key,
size_t keylen) NLIB_NOEXCEPT NLIB_NONNULL;
103 bool CheckString(const
char* key) NLIB_NOEXCEPT NLIB_NONNULL {
127 #define NLIB_EXEC_READ return GetNextValue() ? (void)this->Convert(v), true : false
128 NLIB_VIS_PUBLIC bool Read_(int8_t* v) NLIB_NOEXCEPT { NLIB_EXEC_READ; }
129 NLIB_VIS_PUBLIC bool Read_(int16_t* v) NLIB_NOEXCEPT { NLIB_EXEC_READ; }
130 NLIB_VIS_PUBLIC bool Read_(int32_t* v) NLIB_NOEXCEPT { NLIB_EXEC_READ; }
131 NLIB_VIS_PUBLIC bool Read_(int64_t* v) NLIB_NOEXCEPT { NLIB_EXEC_READ; }
132 NLIB_VIS_PUBLIC bool Read_(uint8_t* v) NLIB_NOEXCEPT { NLIB_EXEC_READ; }
133 NLIB_VIS_PUBLIC bool Read_(uint16_t* v) NLIB_NOEXCEPT { NLIB_EXEC_READ; }
134 NLIB_VIS_PUBLIC bool Read_(uint32_t* v) NLIB_NOEXCEPT { NLIB_EXEC_READ; }
135 NLIB_VIS_PUBLIC bool Read_(uint64_t* v) NLIB_NOEXCEPT { NLIB_EXEC_READ; }
137 NLIB_VIS_PUBLIC bool Read_(
double* v) NLIB_NOEXCEPT { NLIB_EXEC_READ; }
144 #undef NLIB_EXEC_READ
172 ValueObj() NLIB_NOEXCEPT : category(CAT_NIL) {}
174 size_t m_MaxArraySize;
186 if (!this->GetNextArrayNum(&num))
return false;
192 for (i = 0; i < num; ++i) {
193 if (!this->
Read(&v[i]))
return false;
202 template <
class T1,
class T2>
210 if (!r->
Read(&v->first))
return false;
211 if (!r->
Read(&v->second))
return false;
215 template <
class T,
class Alloc>
220 for (
size_t i = 0; i < num; ++i) {
221 if (!r->
Read(&(*v)[i]))
return false;
226 template <
class T,
class Alloc>
231 if (!v->
reserve(num))
return false;
232 for (
size_t i = 0; i < num; ++i) {
234 if (!r->
Read(item))
return false;
239 template <
class K,
class V,
class Pr,
class Alloc>
245 for (
size_t i = 0; i < num; ++i) {
246 if (!r->
Read(&key))
return false;
247 if (!r->
Read(&value))
return false;
254 bool MpReader::Read_(T* v) {
258 #define NLIB_MPREADER_READ_(tp, coerce) \
260 template<> inline bool MpReader::Read_<tp>(tp * v) { \
262 if (!Read_(&vv)) return false; \
263 *v = static_cast<tp>(vv); \
268 NLIB_MPREADER_READ_(
char, int8_t)
269 NLIB_MPREADER_READ_(
unsigned char, uint8_t)
270 NLIB_MPREADER_READ_(
int, int32_t)
271 NLIB_MPREADER_READ_(
unsigned int, uint32_t)
272 NLIB_MPREADER_READ_(
short, int16_t)
273 NLIB_MPREADER_READ_(
unsigned short, uint16_t)
276 NLIB_MPREADER_READ_(
long long, int64_t)
277 NLIB_MPREADER_READ_(
unsigned long long, uint64_t)
279 #undef NLIB_MPREADER_READ_
281 #define NLIB_MPREADER_CONVERT_(tp, coerce) \
283 template<> inline errno_t MpReader::Convert_<tp>(tp * v) { \
284 return this->Convert_(reinterpret_cast<coerce*>(v)); \
288 NLIB_MPREADER_CONVERT_(
char, int8_t)
289 NLIB_MPREADER_CONVERT_(
unsigned char, uint8_t)
290 NLIB_MPREADER_CONVERT_(
int, int32_t)
291 NLIB_MPREADER_CONVERT_(
unsigned int, uint32_t)
292 NLIB_MPREADER_CONVERT_(
short, int16_t)
293 NLIB_MPREADER_CONVERT_(
unsigned short, uint16_t)
296 NLIB_MPREADER_CONVERT_(
long long, int64_t)
297 NLIB_MPREADER_CONVERT_(
unsigned long long, uint64_t)
299 #undef NLIB_MPREADER_CONVERT_
304 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
305 #undef NLIB_VIS_PUBLIC
306 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT
309 #endif // INCLUDE_NN_NLIB_MSGPACK_MPREADER_H_
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
bool Read(char(&v)[n]) noexcept
Read(T (&vec)[n]) を御覧ください。
bool Read(T(&v)[n])
配列又は文字列を読み込みます。
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
#define NLIB_SAFE_BOOL(class_name, exp)
クラス内に安全なoperator bool()を定義します。 可能であればC++11のexplicit boolを利用します。 ...
MessagePack形式のデータをストリームから読み込みます。
errno_t GetErrorValue() const noexcept
発生したエラーを取得します。
static bool Read(MpObject *obj, const void *p, size_t n, const MpReaderSettings &settings) noexcept
MpReaderオブジェクトを構築して、p からMpObjectを設定します。
void SetError(errno_t e) noexcept
エラーを設定します。
bool Close() noexcept
MpReaderをクローズします。
MessagePack又はJSONを読み込むことで作成されるオブジェクトです。
size_t maxMapSize
連想配列の最大サイズを指定します。デフォルトは1024です。
size_t maxArraySize
配列の最大サイズを指定します。デフォルトは65536です。
pointer push_back()
末尾に要素を追加してデフォルトコンストラクタで初期化します。
bool GetNextArrayNum(size_t *num) noexcept
配列のサイズデータを読み込みます。
bool GetNextMapNum(size_t *num) noexcept
連想配列のサイズデータを読み込みます。
#define NLIB_CEXPR
利用可能であればconstexprが定義されます。そうでない場合は空文字列です。
std::vectorに似ていますが、コピーできないオブジェクトを格納可能なクラスが定義されています。 ...
static bool Read(MpObject *obj, const void *p, size_t n) noexcept
Read(MpObject* obj, const void* p, size_t n, const MpReaderSettings& settings)をsettings をデフォルト...
bool Init(InputStream *istr) noexcept
オブジェクトを初期化します。
void clear() noexcept
コンテナをクリアします。
bool MpRead(MpReader *r, std::map< K, V, Pr, Alloc > *m)
データをmapに読み込みます。
MessagePack, JSON及びCSVを読み込むと作成されるオブジェクトです。
MpReaderの設定パラメータ群を格納する構造体です。
bool Read(MpObject *obj) noexcept
Read(T v) を御覧ください。
bool reserve(size_type n) noexcept
n 個の要素のためのメモリをアロケート済みにします。
std::vectorに似た、コピーコンストラクタを持たないオブジェクトを格納可能なコンテナ類似クラスです。 ...
constexpr MpReaderSettings(size_t max_array_size_, size_t max_map_size_, size_t max_raw_size_) noexcept
各データメンバを設定します。
nlib_i64_t i64
nlib_i64_tがtypedefされています。
constexpr MpReaderSettings() noexcept
デフォルトコンストラクタです。各データメンバにデフォルト値を設定します。
bool Read(T v)
ストリームからデータを読み込み、vに設定します。
bool Read(BinaryReader *r, T *x)
この関数テンプレートを特殊化することで、ユーザー定義クラスに読み込むことができます。 ...
size_t maxRawSize
バイト列の最大サイズを指定します。デフォルトは512KBytesです。
MessagePackのnil, 及びJSONのnullに対応するクラスです。
bool ReadArray(BinaryReader *r, T *x, size_t n)
この関数テンプレートを特殊化することで、ユーザー定義クラスに読み込むことができます。 ...