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 : m_Cur(NULL), m_nBytes(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  m_Cur = reinterpret_cast<const uint8_t*>(p);
25  m_nBytes = 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  const void* GetRaw(uint32_t* n) const NLIB_NOEXCEPT NLIB_NONNULL;
38 
39  const void* GetPtr() const NLIB_NOEXCEPT { return m_Cur; }
40  size_t GetSize() const NLIB_NOEXCEPT { return m_nBytes; }
41 
42  NLIB_SAFE_BOOL(MpWalker, IsOk())
43 
44  private:
45  bool IsOk() const NLIB_NOEXCEPT { return m_Cur != NULL && m_nBytes > 0; }
46 
47  const uint8_t* m_Cur;
48  size_t m_nBytes;
49 };
50 
51 } // namespace msgpack
52 NLIB_NAMESPACE_END
53 
54 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
55 #undef NLIB_VIS_PUBLIC
56 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT
57 #endif
58 
59 #endif // INCLUDE_NN_NLIB_MSGPACK_MPWALKER_H_
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Platform.h:2151
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
#define NLIB_NONNULL
全ての引数にNULLを指定することができないことを示します。
Definition: Platform_unix.h:66
#define NLIB_SAFE_BOOL(class_name, exp)
クラス内に安全なoperator bool()を定義します。 可能であればC++11のexplicit boolを利用します。 ...
Definition: Config.h:141
MpWalker() noexcept
デフォルトコンストラクタです。
Definition: MpWalker.h:19
#define RSIZE_MAX
size_tの最大値よりいくらか小さい値が定義されています。
Definition: Platform.h:295
MpWalker operator[](int array_idx) const noexcept
operator[](size_t array_idx) と同様です。
Definition: MpWalker.h:31
開発環境別の設定が書かれるファイルです。
メモリ上に展開されたMessagePackのデータに高速にアクセスします。
Definition: MpWalker.h:17
bool Init(const void *p, size_t n) noexcept
デフォルトコンストラクタを利用した場合はこの関数で初期化します。
Definition: MpWalker.h:22
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:51
const void * GetPtr() const noexcept
MessagePackデータの現在位置へのポインタを取得します。
Definition: MpWalker.h:39
~MpWalker() noexcept
デストラクタです。
Definition: MpWalker.h:20
size_t GetSize() const noexcept
MessagePackデータのサイズを取得します。
Definition: MpWalker.h:40