nlib
MpWalker.h
[詳解]
1 
2 #pragma once
3 #ifndef INCLUDE_NN_NLIB_MSGPACK_MPWALKER_H_
4 #define INCLUDE_NN_NLIB_MSGPACK_MPWALKER_H_
5 
6 #include "nn/nlib/Config.h"
7 
8 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
9 #undef NLIB_VIS_PUBLIC
10 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT
11 #endif
12 
13 NLIB_NAMESPACE_BEGIN
14 namespace msgpack {
15 
16 class MpObject;
18  public:
19  MpWalker() NLIB_NOEXCEPT : cur_(NULL), size_(0) {}
21  MpWalker(const void* p, size_t n) NLIB_NOEXCEPT;
22  bool Init(const void* p, size_t n) NLIB_NOEXCEPT NLIB_NONNULL {
23  if (n > RSIZE_MAX) return false;
24  cur_ = reinterpret_cast<const uint8_t*>(p);
25  size_ = n;
26  return true;
27  }
28 
29  MpWalker operator[](size_t array_idx) const NLIB_NOEXCEPT;
30  MpWalker operator[](const char* key) const NLIB_NOEXCEPT NLIB_NONNULL;
31  MpWalker operator[](int array_idx) const NLIB_NOEXCEPT {
32  if (array_idx < 0)
33  return MpWalker();
34  else
35  return operator[](static_cast<size_t>(array_idx));
36  }
37 
38  const void* GetPtr() const NLIB_NOEXCEPT { return cur_; }
39  size_t GetSize() const NLIB_NOEXCEPT { return size_; }
40 
41  MpWalker At(size_t idx) const NLIB_NOEXCEPT;
42  MpWalker At(size_t idx, const char** key, size_t* n) const NLIB_NOEXCEPT NLIB_NONNULL;
43  MpWalker Find(const char* key) const NLIB_NOEXCEPT NLIB_NONNULL;
44  MpWalker Skip() const NLIB_NOEXCEPT;
45  MpWalker GetString(const char** str, uint32_t* n) const NLIB_NOEXCEPT NLIB_NONNULL;
46  MpWalker GetBinary(const void** bin, uint32_t* n) const NLIB_NOEXCEPT NLIB_NONNULL;
47  MpWalker GetExt(int8_t* tp, const void** bin, uint32_t* n) const NLIB_NOEXCEPT NLIB_NONNULL;
48  MpWalker GetMapCount(uint32_t* n) const NLIB_NOEXCEPT NLIB_NONNULL;
49  MpWalker GetArrayCount(uint32_t* n) const NLIB_NOEXCEPT NLIB_NONNULL;
50  MpWalker GetNil() const NLIB_NOEXCEPT;
51  MpWalker GetBoolean(bool* val) const NLIB_NOEXCEPT NLIB_NONNULL;
52  MpWalker GetInt(int32_t* val) const NLIB_NOEXCEPT NLIB_NONNULL;
53  MpWalker GetInt(int64_t* val) const NLIB_NOEXCEPT NLIB_NONNULL;
54  MpWalker GetUint(uint32_t* val) const NLIB_NOEXCEPT NLIB_NONNULL;
55  MpWalker GetUint(uint64_t* val) const NLIB_NOEXCEPT NLIB_NONNULL;
56  MpWalker GetFloat(float* val) const NLIB_NOEXCEPT NLIB_NONNULL;
57  MpWalker GetDouble(double* val) const NLIB_NOEXCEPT NLIB_NONNULL;
58  NLIB_SAFE_BOOL(MpWalker, IsOk())
59 
60  private:
61  bool IsOk() const NLIB_NOEXCEPT { return cur_ != NULL && size_ > 0; }
62 
63  const uint8_t* cur_;
64  size_t size_;
65 };
66 
67 } // namespace msgpack
68 NLIB_NAMESPACE_END
69 
70 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
71 #undef NLIB_VIS_PUBLIC
72 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT
73 #endif
74 
75 #endif // INCLUDE_NN_NLIB_MSGPACK_MPWALKER_H_
#define NLIB_SAFE_BOOL(class_name, exp)
クラス内に安全なoperator bool()を定義します。 可能であればC++11のexplicit boolを利用します。 ...
Definition: Config.h:160
MpWalker() noexcept
デフォルトコンストラクタです。
Definition: MpWalker.h:19
#define RSIZE_MAX
size_tの最大値よりいくらか小さい値が定義されています。
Definition: Platform.h:541
size_t GetSize() const noexcept
MessagePackデータのサイズを取得します。
Definition: MpWalker.h:39
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:61
MpWalker operator[](int array_idx) const noexcept
operator[](size_t array_idx) と同様です。
Definition: MpWalker.h:31
const void * GetPtr() const noexcept
MessagePackデータの現在位置へのポインタを取得します。
Definition: MpWalker.h:38
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Config.h:86
開発環境別の設定が書かれるファイルです。
メモリ上に展開されたMessagePackのデータに高速にアクセスします。
Definition: MpWalker.h:17
bool Init(const void *p, size_t n) noexcept
デフォルトコンストラクタを利用した場合はこの関数で初期化します。
Definition: MpWalker.h:22
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
Definition: Config.h:211
~MpWalker() noexcept
デストラクタです。
Definition: MpWalker.h:20
#define NLIB_NONNULL
全ての引数にNULLを指定することができないことを示します。
Definition: Platform_unix.h:76