AM Daemon ライブラリリファレンス
FeliCaId.h
[詳解]
1 /// @file
2 /// @brief FeliCa IDm/PMm をラップする構造体 FeliCaId のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_FELICAID_H
7 #define AMDAEMON_FELICAID_H
8 
9 #include "amdaemon/env.h"
11 
12 #include <string>
13 #include <cstdint>
14 #include <cstddef>
15 #include <cstring>
16 
17 namespace amdaemon
18 {
19 /// @addtogroup g_aime
20 /// @{
21 
22  //--------------------
23  // FeliCaId 構造体定義
24  //--------------------
25 
26  /// @brief FeliCa IDm/PMm をラップする構造体。
27  /// @note memcpy 可能。
28  ///
29  /// AiMeLibの AiMeDef::FeliCaID 構造体とバイナリ互換である。
30  ///
31  /// @internal ライブラリ実装メモ: この型を直接共有メモリに配置する。
32  struct FeliCaId
33  {
34  /// 製造ID(IDm)構造体。
35  struct IDm
36  {
37  std::uint16_t product; ///< 製造者コード。
38  std::uint16_t machine; ///< 製造機器コード。
39  std::uint16_t days; ///< 2000年1月1日からの経過日数。
40  std::uint16_t serial; ///< シリアル番号。
41  };
42 
43  /// 製造パラメータ(PMm)構造体。
44  struct PMm
45  {
46  std::uint8_t rom; ///< ROM種別値。
47  std::uint8_t ic; ///< IC種別値。
48  std::uint8_t response[6]; ///< 最大応答時間パラメータ。
49  };
50 
51  /// 内部値サイズ。
52  static const std::size_t Size = sizeof(IDm) + sizeof(PMm);
53 
54  /// 内部値。 IDm と PMm をコピーしたバイナリ値。AiMeLib互換。
55  std::uint8_t values[Size];
56 
57  /// @brief ゼロ埋めされた FeliCaId 値を取得する。
58  /// @return ゼロ埋めされた FeliCaId 値。
59  static const FeliCaId& zero();
60 
61  /// @brief バイナリ値から FeliCaId 値を作成する。
62  /// @param[in] values バイナリ値。
63  /// @return 作成された FeliCaId 値。
64  static FeliCaId make(const std::uint8_t (&values)[Size]);
65 
66  /// @brief IDm 値と PMm 値から FeliCaId 値を作成する。
67  /// @param[in] idm IDm 値。
68  /// @param[in] pmm PMm 値。
69  /// @return 作成された FeliCaId 値。
70  static FeliCaId make(const IDm& idm, const PMm& pmm);
71 
72  /// @brief IDm バイナリ値と PMm バイナリ値から FeliCaId 値を作成する。
73  /// @param[in] idm IDm バイナリ値。
74  /// @param[in] pmm PMm バイナリ値。
75  /// @return 作成された FeliCaId 値。
76  static FeliCaId make(
77  const std::uint8_t (&idm)[sizeof(IDm)],
78  const std::uint8_t (&pmm)[sizeof(PMm)]);
79 
80  /// @brief IDm 値を取得する。
81  /// @return IDm 値。
82  const IDm& getIDm() const;
83 
84  /// @brief PMm 値を取得する。
85  /// @return PMm 値。
86  const PMm& getPMm() const;
87 
88  /// @brief 文字列表現値を作成する。
89  /// @return 文字列表現値。
90  ///
91  /// 内部データを16進数文字列に変換して返す。
92  std::wstring toString() const;
93  };
94 
95 /// @}
96 
97  //--------------------
98  // インライン関数定義
99  //--------------------
100 
101  /// @brief 等価比較演算子のオーバロード。
102  /// @param[in] l 左辺値。
103  /// @param[in] r 右辺値。
104  /// @return 比較結果値。
105  /// @relatesalso FeliCaId
106  inline bool operator==(const FeliCaId& l, const FeliCaId& r)
107  {
108  return (std::memcmp(l.values, r.values, sizeof(l.values)) == 0);
109  }
110 
111  /// @brief 非等価比較演算子のオーバロード。
112  /// @param[in] l 左辺値。
113  /// @param[in] r 右辺値。
114  /// @return 比較結果値。
115  /// @relatesalso FeliCaId
116  inline bool operator!=(const FeliCaId& l, const FeliCaId& r)
117  {
118  return !(l == r);
119  }
120 
121  /// @brief 小なり比較演算子のオーバロード。
122  /// @param[in] l 左辺値。
123  /// @param[in] r 右辺値。
124  /// @return 比較結果値。
125  /// @relatesalso FeliCaId
126  inline bool operator<(const FeliCaId& l, const FeliCaId& r)
127  {
128  return (std::memcmp(l.values, r.values, sizeof(l.values)) < 0);
129  }
130 
131  /// @brief 大なり比較演算子のオーバロード。
132  /// @param[in] l 左辺値。
133  /// @param[in] r 右辺値。
134  /// @return 比較結果値。
135  /// @relatesalso FeliCaId
136  inline bool operator>(const FeliCaId& l, const FeliCaId& r)
137  {
138  return (r < l);
139  }
140 
141  /// @brief 小なり等価比較演算子のオーバロード。
142  /// @param[in] l 左辺値。
143  /// @param[in] r 右辺値。
144  /// @return 比較結果値。
145  /// @relatesalso FeliCaId
146  inline bool operator<=(const FeliCaId& l, const FeliCaId& r)
147  {
148  return !(r < l);
149  }
150 
151  /// @brief 大なり等価比較演算子のオーバロード。
152  /// @param[in] l 左辺値。
153  /// @param[in] r 右辺値。
154  /// @return 比較結果値。
155  /// @relatesalso FeliCaId
156  inline bool operator>=(const FeliCaId& l, const FeliCaId& r)
157  {
158  return !(l < r);
159  }
160 } // namespace amdaemon
161 
162 namespace std
163 {
164  // 前方宣言
165  template<class T> struct hash;
166 
167  /// @brief ハッシュ値を求めるファンクタ構造体。
168  ///
169  /// std::hash クラステンプレートの amdaemon::FeliCaId 構造体に対する特殊化。
170  template<>
171  struct hash< ::amdaemon::FeliCaId >
172  {
173  /// 戻り値の型。
174  typedef size_t result_type;
175 
176  /// 引数の型。
177  typedef ::amdaemon::FeliCaId argument_type;
178 
179  /// @brief 引数のハッシュ値を取得する。
180  /// @param[in] feliCaId 引数。
181  /// @return ハッシュ値。
182  result_type operator()(const argument_type& feliCaId) const
183  {
184  // 先頭から sizeof(result_type) バイトを用いる
185  AMDAEMON_STATIC_ASSERT(sizeof(feliCaId.values) >= sizeof(result_type));
186  return *reinterpret_cast<const result_type*>(feliCaId.values);
187  }
188  };
189 } // namespace std
190 
191 #endif // AMDAEMON_FELICAID_H
製造パラメータ(PMm)構造体。
Definition: FeliCaId.h:44
bool operator<(const FeliCaId &l, const FeliCaId &r)
小なり比較演算子のオーバロード。
Definition: FeliCaId.h:126
std::uint16_t days
2000年1月1日からの経過日数。
Definition: FeliCaId.h:39
static const FeliCaId & zero()
ゼロ埋めされた FeliCaId 値を取得する。
::amdaemon::FeliCaId argument_type
引数の型。
Definition: FeliCaId.h:177
bool operator>(const FeliCaId &l, const FeliCaId &r)
大なり比較演算子のオーバロード。
Definition: FeliCaId.h:136
std::uint8_t rom
ROM種別値。
Definition: FeliCaId.h:46
Definition: AccessCode.h:202
bool operator<=(const FeliCaId &l, const FeliCaId &r)
小なり等価比較演算子のオーバロード。
Definition: FeliCaId.h:146
std::uint8_t ic
IC種別値。
Definition: FeliCaId.h:47
Daemonライブラリの環境定義を行うヘッダ。
const PMm & getPMm() const
PMm 値を取得する。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
コンパイル時アサートマクロを定義するヘッダ。
static FeliCaId make(const std::uint8_t(&values)[Size])
バイナリ値から FeliCaId 値を作成する。
static const std::size_t Size
内部値サイズ。
Definition: FeliCaId.h:52
製造ID(IDm)構造体。
Definition: FeliCaId.h:35
std::uint16_t product
製造者コード。
Definition: FeliCaId.h:37
std::uint16_t machine
製造機器コード。
Definition: FeliCaId.h:38
bool operator>=(const FeliCaId &l, const FeliCaId &r)
大なり等価比較演算子のオーバロード。
Definition: FeliCaId.h:156
#define AMDAEMON_STATIC_ASSERT(flag)
引数が偽であればコンパイルエラーとする。
Definition: StaticAssert.h:17
FeliCa IDm/PMm をラップする構造体。
Definition: FeliCaId.h:32
std::uint16_t serial
シリアル番号。
Definition: FeliCaId.h:40
size_t result_type
戻り値の型。
Definition: FeliCaId.h:174
const IDm & getIDm() const
IDm 値を取得する。
bool operator!=(const FeliCaId &l, const FeliCaId &r)
非等価比較演算子のオーバロード。
Definition: FeliCaId.h:116
bool operator==(const FeliCaId &l, const FeliCaId &r)
等価比較演算子のオーバロード。
Definition: FeliCaId.h:106
std::wstring toString() const
文字列表現値を作成する。
result_type operator()(const argument_type &feliCaId) const
引数のハッシュ値を取得する。
Definition: FeliCaId.h:182
std::uint8_t values[Size]
内部値。 IDm と PMm をコピーしたバイナリ値。AiMeLib互換。
Definition: FeliCaId.h:55