AM Daemon ライブラリリファレンス
AimeId.h
[詳解]
1 /// @file
2 /// @brief AimeのUID値を保持する構造体 AimeId のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_AIMEID_H
7 #define AMDAEMON_AIMEID_H
8 
9 #include "amdaemon/env.h"
10 
11 #include <string>
12 #include <cstdint>
13 #include <cstddef>
14 
15 namespace amdaemon
16 {
17 /// @addtogroup g_aime
18 /// @{
19 
20  //--------------------
21  // AimeId 構造体定義
22  //--------------------
23 
24  /// @brief AimeのUID値を保持する構造体。
25  /// @note memcpy 可能。
26  /// @internal ライブラリ実装メモ: この型を直接共有メモリに配置する。
27  struct AimeId
28  {
29  /// 内部値の表現型。
30  typedef std::uint32_t value_type;
31 
32  /// UID値。
33  value_type value;
34 
35  /// @brief AimeId 値を作成する。
36  /// @param[in] value UID値。
37  /// @return 作成された AimeId 値。
38  static AimeId make(value_type value)
39  {
40  AimeId result = { value };
41  return result;
42  }
43 
44  /// @brief ゼロ値の AimeId 値を作成する。
45  /// @return ゼロ値の AimeId 値。
46  static AimeId zero()
47  {
48  return make(0);
49  }
50 
51  /// @brief 無効な AimeId 値を作成する。
52  /// @return 無効な AimeId 値。
54  {
55  return make(UINT32_MAX);
56  }
57 
58  /// @brief 有効な値であるか否かを取得する。
59  /// @retval true 有効な値である場合。
60  /// @retval false 無効な値である場合。
61  ///
62  /// 内部値が 0 でも UINT32_MAX でもなければ true を返す。
63  ///
64  /// AiMeLibの規定する無効なUID値は UINT32_MAX のみだが、
65  /// 実際のアプリではゼロ埋め初期化する実装もよくあるため、 0 も無効値として扱う。
66  ///
67  /// 一般に開放されているAimeのUID値は 10000 以上であるため、
68  /// 0 を無効値として扱うことにより実店舗で問題となることはない。
69  bool valid() const
70  {
71  return (value != 0 && value != UINT32_MAX);
72  }
73 
74  /// @brief 文字列表現値を作成する。
75  /// @return 文字列表現値。
76  ///
77  /// UID値を文字列化して返す。
78  std::wstring toString() const
79  {
80  return std::to_wstring(value);
81  }
82  };
83 
84 /// @}
85 
86  //--------------------
87  // インライン関数定義
88  //--------------------
89 
90  /// @brief 等価比較演算子のオーバロード。
91  /// @param[in] l 左辺値。
92  /// @param[in] r 右辺値。
93  /// @return 比較結果値。
94  /// @relatesalso AimeId
95  inline bool operator==(const AimeId& l, const AimeId& r)
96  {
97  return (l.value == r.value);
98  }
99 
100  /// @brief 非等価比較演算子のオーバロード。
101  /// @param[in] l 左辺値。
102  /// @param[in] r 右辺値。
103  /// @return 比較結果値。
104  /// @relatesalso AimeId
105  inline bool operator!=(const AimeId& l, const AimeId& r)
106  {
107  return !(l == r);
108  }
109 
110  /// @brief 小なり比較演算子のオーバロード。
111  /// @param[in] l 左辺値。
112  /// @param[in] r 右辺値。
113  /// @return 比較結果値。
114  /// @relatesalso AimeId
115  inline bool operator<(const AimeId& l, const AimeId& r)
116  {
117  return (l.value < r.value);
118  }
119 
120  /// @brief 大なり比較演算子のオーバロード。
121  /// @param[in] l 左辺値。
122  /// @param[in] r 右辺値。
123  /// @return 比較結果値。
124  /// @relatesalso AimeId
125  inline bool operator>(const AimeId& l, const AimeId& r)
126  {
127  return (r < l);
128  }
129 
130  /// @brief 小なり等価比較演算子のオーバロード。
131  /// @param[in] l 左辺値。
132  /// @param[in] r 右辺値。
133  /// @return 比較結果値。
134  /// @relatesalso AimeId
135  inline bool operator<=(const AimeId& l, const AimeId& r)
136  {
137  return !(r < l);
138  }
139 
140  /// @brief 大なり等価比較演算子のオーバロード。
141  /// @param[in] l 左辺値。
142  /// @param[in] r 右辺値。
143  /// @return 比較結果値。
144  /// @relatesalso AimeId
145  inline bool operator>=(const AimeId& l, const AimeId& r)
146  {
147  return !(l < r);
148  }
149 } // namespace amdaemon
150 
151 namespace std
152 {
153  // 前方宣言
154  template<class T> struct hash;
155 
156  /// @brief ハッシュ値を求めるファンクタ構造体。
157  ///
158  /// std::hash クラステンプレートの amdaemon::AimeId 構造体に対する特殊化。
159  template<>
160  struct hash< ::amdaemon::AimeId >
161  {
162  /// 戻り値の型。
163  typedef size_t result_type;
164 
165  /// 引数の型。
166  typedef ::amdaemon::AimeId argument_type;
167 
168  /// @brief 引数のハッシュ値を取得する。
169  /// @param[in] id 引数。
170  /// @return ハッシュ値。
171  result_type operator()(argument_type id) const
172  {
173  return static_cast<result_type>(id.value);
174  }
175  };
176 } // namespace std
177 
178 #endif // AMDAEMON_AIMEID_H
bool operator>=(const AimeId &l, const AimeId &r)
大なり等価比較演算子のオーバロード。
Definition: AimeId.h:145
static AimeId makeInvalid()
無効な AimeId 値を作成する。
Definition: AimeId.h:53
AimeのUID値を保持する構造体。
Definition: AimeId.h:27
size_t result_type
戻り値の型。
Definition: AimeId.h:163
std::wstring toString() const
文字列表現値を作成する。
Definition: AimeId.h:78
Definition: AccessCode.h:202
Daemonライブラリの環境定義を行うヘッダ。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
std::uint32_t value_type
内部値の表現型。
Definition: AimeId.h:30
result_type operator()(argument_type id) const
引数のハッシュ値を取得する。
Definition: AimeId.h:171
bool operator<(const AimeId &l, const AimeId &r)
小なり比較演算子のオーバロード。
Definition: AimeId.h:115
bool operator<=(const AimeId &l, const AimeId &r)
小なり等価比較演算子のオーバロード。
Definition: AimeId.h:135
static AimeId zero()
ゼロ値の AimeId 値を作成する。
Definition: AimeId.h:46
static AimeId make(value_type value)
AimeId 値を作成する。
Definition: AimeId.h:38
value_type value
UID値。
Definition: AimeId.h:33
bool operator>(const AimeId &l, const AimeId &r)
大なり比較演算子のオーバロード。
Definition: AimeId.h:125
bool operator==(const AimeId &l, const AimeId &r)
等価比較演算子のオーバロード。
Definition: AimeId.h:95
bool valid() const
有効な値であるか否かを取得する。
Definition: AimeId.h:69
bool operator!=(const AimeId &l, const AimeId &r)
非等価比較演算子のオーバロード。
Definition: AimeId.h:105
::amdaemon::AimeId argument_type
引数の型。
Definition: AimeId.h:166