AM Daemon ライブラリリファレンス
AimeOfflineId.h
[詳解]
1 /// @file
2 /// @brief オフラインでAimeを識別するためのID値構造体 AimeOfflineId のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_AIMEOFFLINEID_H
7 #define AMDAEMON_AIMEOFFLINEID_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/AccessCode.h"
11 #include "amdaemon/FeliCaId.h"
13 
14 #include <string>
15 #include <cstdint>
16 #include <cstddef>
17 
18 namespace amdaemon
19 {
20 /// @addtogroup g_aime
21 /// @{
22 
23  //--------------------
24  // AimeOfflineId 構造体定義
25  //--------------------
26 
27  /// @brief オフラインでAimeを識別するためのID値構造体。
28  /// @note memcpy 可能。
29  /// @internal ライブラリ実装メモ: この型を直接共有メモリに配置する。
31  {
32  /// 内部データ種別列挙。
33  enum class Type : std::uint8_t
34  {
35  None = 0, ///< なし。無効値扱いとなる。
36 
37  /// @brief アクセスコード値。
38  ///
39  /// Aimeカード、バナパスポートカード、キャラEdyではこちらが使われる。
40  AccessCode,
41 
42  /// @brief FeliCaId 値。
43  ///
44  /// おサイフケータイ、共通アミューズメントICカードではこちらが使われる。
45  FeliCaId,
46  };
47 
48  /// 内部データ共用体。
49  union DataUnion
50  {
51  AccessCode accessCode; ///< アクセスコード値。
52  FeliCaId feliCaId; ///< FeliCaId 値。
53  };
54 
55  /// 内部値サイズ。
56  static const std::size_t Size = sizeof(Type) + sizeof(DataUnion);
57 
58  /// 内部値。種別列挙値と内部データをコピーしたバイナリ値。
59  std::uint8_t values[Size];
60 
61  /// @brief ゼロ埋めされた無効な AimeOfflineId 値を取得する。
62  /// @return ゼロ埋めされた無効な AimeOfflineId 値。
63  static const AimeOfflineId& zero();
64 
65  /// @brief アクセスコード値から AimeOfflineId 値を作成する。
66  /// @param[in] accessCode アクセスコード値。
67  /// @return 作成された AimeOfflineId 値。
68  ///
69  /// 引数 accessCode が無効値であっても構わず作成する。
70  static AimeOfflineId make(const AccessCode& accessCode);
71 
72  /// @brief FeliCaId 値から AimeOfflineId 値を作成する。
73  /// @param[in] feliCaId FeliCaId 値。
74  /// @return 作成された AimeOfflineId 値。
75  static AimeOfflineId make(const FeliCaId& feliCaId);
76 
77  /// @brief 有効な値であるか否かを取得する。
78  /// @retval true 有効な値である場合。
79  /// @retval false 無効な値である場合。
80  bool valid() const;
81 
82  /// @brief 内部データ種別値を取得する。
83  /// @return 内部データ種別値。
84  ///
85  /// 無効値であっても保持している値をそのまま返すため、
86  /// 列挙値として定義されていない値を返す場合がある。
87  ///
88  /// この値でAime種別を一意に判別することはできない。
89  Type getType() const;
90 
91  /// @brief 内部データ値を取得する。
92  /// @return 内部データ値。
93  /// @see getType
94  ///
95  /// 内部データ種別によって参照すべきデータが異なる。
96  /// 参照すべきデータ以外を参照した場合の値は不定値となる。
97  const DataUnion& getData() const;
98 
99  /// @brief 文字列表現値を作成する。
100  /// @return 文字列表現値。
101  ///
102  /// 内部データ種別と内部データの文字列表現値を文字 ':' で連結して返す。
103  /// 内部データ種別が無効値である場合は空文字列を返す。
104  std::wstring toString() const;
105  };
106 
107 /// @}
108 
109  //--------------------
110  // インライン関数定義
111  //--------------------
112 
113  /// @brief 等価比較演算子のオーバロード。
114  /// @param[in] l 左辺値。
115  /// @param[in] r 右辺値。
116  /// @return 比較結果値。
117  /// @relatesalso AimeOfflineId
118  inline bool operator==(const AimeOfflineId& l, const AimeOfflineId& r)
119  {
120  return (std::memcmp(l.values, r.values, sizeof(l.values)) == 0);
121  }
122 
123  /// @brief 非等価比較演算子のオーバロード。
124  /// @param[in] l 左辺値。
125  /// @param[in] r 右辺値。
126  /// @return 比較結果値。
127  /// @relatesalso AimeOfflineId
128  inline bool operator!=(const AimeOfflineId& l, const AimeOfflineId& r)
129  {
130  return !(l == r);
131  }
132 
133  /// @brief 小なり比較演算子のオーバロード。
134  /// @param[in] l 左辺値。
135  /// @param[in] r 右辺値。
136  /// @return 比較結果値。
137  /// @relatesalso AimeOfflineId
138  inline bool operator<(const AimeOfflineId& l, const AimeOfflineId& r)
139  {
140  return (std::memcmp(l.values, r.values, sizeof(l.values)) < 0);
141  }
142 
143  /// @brief 大なり比較演算子のオーバロード。
144  /// @param[in] l 左辺値。
145  /// @param[in] r 右辺値。
146  /// @return 比較結果値。
147  /// @relatesalso AimeOfflineId
148  inline bool operator>(const AimeOfflineId& l, const AimeOfflineId& r)
149  {
150  return (r < l);
151  }
152 
153  /// @brief 小なり等価比較演算子のオーバロード。
154  /// @param[in] l 左辺値。
155  /// @param[in] r 右辺値。
156  /// @return 比較結果値。
157  /// @relatesalso AimeOfflineId
158  inline bool operator<=(const AimeOfflineId& l, const AimeOfflineId& r)
159  {
160  return !(r < l);
161  }
162 
163  /// @brief 大なり等価比較演算子のオーバロード。
164  /// @param[in] l 左辺値。
165  /// @param[in] r 右辺値。
166  /// @return 比較結果値。
167  /// @relatesalso AimeOfflineId
168  inline bool operator>=(const AimeOfflineId& l, const AimeOfflineId& r)
169  {
170  return !(l < r);
171  }
172 } // namespace amdaemon
173 
174 namespace std
175 {
176  // 前方宣言
177  template<class T> struct hash;
178 
179  /// @brief ハッシュ値を求めるファンクタ構造体。
180  ///
181  /// std::hash クラステンプレートの amdaemon::AimeOfflineId 構造体に対する特殊化。
182  template<>
183  struct hash< ::amdaemon::AimeOfflineId >
184  {
185  /// 戻り値の型。
186  typedef size_t result_type;
187 
188  /// 引数の型。
189  typedef ::amdaemon::AimeOfflineId argument_type;
190 
191  /// @brief 引数のハッシュ値を取得する。
192  /// @param[in] id 引数。
193  /// @return ハッシュ値。
194  result_type operator()(const argument_type& id) const
195  {
196  // 先頭から sizeof(result_type) バイトを用いる
197  AMDAEMON_STATIC_ASSERT(sizeof(id.values) >= sizeof(result_type));
198  return *reinterpret_cast<const result_type*>(id.values);
199  }
200  };
201 } // namespace std
202 
203 #endif // AMDAEMON_AIMEOFFLINEID_H
bool valid() const
有効な値であるか否かを取得する。
static const AimeOfflineId & zero()
ゼロ埋めされた無効な AimeOfflineId 値を取得する。
FeliCaId feliCaId
FeliCaId 値。
Definition: AimeOfflineId.h:52
なし。無効値扱いとなる。
Definition: AccessCode.h:202
AccessCode accessCode
アクセスコード値。
Definition: AimeOfflineId.h:51
Daemonライブラリの環境定義を行うヘッダ。
FeliCa IDm/PMm をラップする構造体 FeliCaId のヘッダ。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
内部データ共用体。
Definition: AimeOfflineId.h:49
コンパイル時アサートマクロを定義するヘッダ。
アクセスコード値構造体。
Definition: AccessCode.h:32
static const std::size_t Size
内部値サイズ。
Definition: AimeOfflineId.h:56
std::uint8_t values[Size]
内部値。種別列挙値と内部データをコピーしたバイナリ値。
Definition: AimeOfflineId.h:59
bool operator<(const AimeOfflineId &l, const AimeOfflineId &r)
小なり比較演算子のオーバロード。
Definition: AimeOfflineId.h:138
size_t result_type
戻り値の型。
Definition: AimeOfflineId.h:186
オフラインでAimeを識別するためのID値構造体。
Definition: AimeOfflineId.h:30
Type
内部データ種別列挙。
Definition: AimeOfflineId.h:33
bool operator==(const AimeOfflineId &l, const AimeOfflineId &r)
等価比較演算子のオーバロード。
Definition: AimeOfflineId.h:118
bool operator>=(const AimeOfflineId &l, const AimeOfflineId &r)
大なり等価比較演算子のオーバロード。
Definition: AimeOfflineId.h:168
bool operator!=(const AimeOfflineId &l, const AimeOfflineId &r)
非等価比較演算子のオーバロード。
Definition: AimeOfflineId.h:128
const DataUnion & getData() const
内部データ値を取得する。
#define AMDAEMON_STATIC_ASSERT(flag)
引数が偽であればコンパイルエラーとする。
Definition: StaticAssert.h:17
std::wstring toString() const
文字列表現値を作成する。
bool operator>(const AimeOfflineId &l, const AimeOfflineId &r)
大なり比較演算子のオーバロード。
Definition: AimeOfflineId.h:148
::amdaemon::AimeOfflineId argument_type
引数の型。
Definition: AimeOfflineId.h:189
アクセスコード値構造体 AccessCode のヘッダ。
FeliCa IDm/PMm をラップする構造体。
Definition: FeliCaId.h:32
アクセスコード値。
Type getType() const
内部データ種別値を取得する。
static AimeOfflineId make(const AccessCode &accessCode)
アクセスコード値から AimeOfflineId 値を作成する。
bool operator<=(const AimeOfflineId &l, const AimeOfflineId &r)
小なり等価比較演算子のオーバロード。
Definition: AimeOfflineId.h:158
result_type operator()(const argument_type &id) const
引数のハッシュ値を取得する。
Definition: AimeOfflineId.h:194