AM Daemon ライブラリリファレンス
Version.h
[詳解]
1 /// @file
2 /// @brief バージョン値構造体 Version のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_VERSION_H
7 #define AMDAEMON_VERSION_H
8 
9 #include "amdaemon/env.h"
10 
11 #include <string>
12 #include <cstdint>
13 
14 namespace amdaemon
15 {
16  //--------------------
17  // Version 構造体定義
18  //--------------------
19 
20  /// @brief バージョン値構造体。
21  /// @note memcpy 可能。
22  /// @ingroup g_appimage g_netdelivery
23  /// @internal ライブラリ実装メモ: この型を直接共有メモリに配置する。
24  struct Version
25  {
26  /// 内部値の表現型。
27  typedef std::uint32_t value_type;
28 
29  /// パッチバージョン値の最大許容値。
30  static const value_type PatchLimit = (1 << 8) - 1;
31 
32  /// マイナーバージョン値の最大許容値。
33  static const value_type MinorLimit = PatchLimit;
34 
35  /// メジャーバージョン値の最大許容値。
36  static const value_type MajorLimit =
37  UINT32_MAX / ((MinorLimit + 1) * (PatchLimit + 1));
38 
39  /// 内部値。 libam のアプリバージョン値と同等のフォーマット。
40  value_type value;
41 
42  /// @brief バージョン値を作成可能な各バージョン値であるか否かを調べる。
43  /// @param[in] major メジャーバージョン値。 MajorLimit 以下。
44  /// @param[in] minor マイナーバージョン値。 MinorLimit 以下。
45  /// @param[in] patch パッチバージョン値。 PatchLimit 以下。
46  /// @retval true 作成可能である場合。
47  /// @retval false 作成不可能である場合。
48  /// @see make(value_type, value_type, value_type)
49  ///
50  /// この関数が true を返す場合、同じ引数を静的メンバ関数 make に渡すことで
51  /// 例外を発生させることなくバージョン値を作成可能であることが保証される。
52  static bool canMake(value_type major, value_type minor, value_type patch = 0);
53 
54  /// @brief 各バージョン値からバージョン値を作成する。
55  /// @param[in] major メジャーバージョン値。 MajorLimit 以下。
56  /// @param[in] minor マイナーバージョン値。 MinorLimit 以下。
57  /// @param[in] patch パッチバージョン値。 PatchLimit 以下。
58  /// @return バージョン値。
59  /// @see canMake(value_type, value_type, value_type)
60  ///
61  /// @exception Exception
62  /// - 引数 major に MajorLimit より大きい値を指定した場合。
63  /// - 引数 minor に MinorLimit より大きい値を指定した場合。
64  /// - 引数 patch に PatchLimit より大きい値を指定した場合。
65  static Version make(value_type major, value_type minor, value_type patch = 0);
66 
67  /// @brief バージョン値を作成可能なバージョン文字列であるか否かを調べる。
68  /// @param[in] src バージョン文字列。 "1.23.45", "6.78" 等。
69  /// @retval true 作成可能である場合。
70  /// @retval false 作成不可能である場合。
71  /// @see make(const wchar_t*)
72  ///
73  /// この関数が true を返す場合、同じ引数を静的メンバ関数 make に渡すことで
74  /// 例外を発生させることなくバージョン値を作成可能であることが保証される。
75  static bool canMake(const wchar_t* src);
76 
77  /// @brief バージョン文字列からバージョン値を作成する。
78  /// @param[in] src バージョン文字列。 "1.23.45", "6.78" 等。
79  /// @return バージョン値。
80  /// @see canMake(const wchar_t*)
81  ///
82  /// @exception Exception
83  /// - 引数 src に nullptr を指定した場合。
84  /// - 引数 src のフォーマットが不正である場合。
85  /// - 引数 src の構成数値が許容範囲外である場合。
86  ///
87  /// - メジャーバージョン値、マイナーバージョン値、パッチバージョン値を表す
88  /// 10進数文字列を文字 '.' で連結した文字列からバージョン値を作成する。
89  /// - パッチバージョン値は省略可能であり、その場合は 0 が指定されたものとみなす。
90  static Version make(const wchar_t* src);
91 
92  /// @brief "0.00.00" のバージョン値を作成する。
93  /// @return "0.00.00" のバージョン値。
94  static Version zero()
95  {
96  Version result = { };
97  return result;
98  }
99 
100  /// @brief メジャーバージョン値を取得する。
101  /// @return メジャーバージョン値。
102  value_type major() const
103  {
104  return (value / ((MinorLimit + 1) * (PatchLimit + 1)));
105  }
106 
107  /// @brief マイナーバージョン値を取得する。
108  /// @return マイナーバージョン値。
109  value_type minor() const
110  {
111  return (value / (PatchLimit + 1) % (MinorLimit + 1));
112  }
113 
114  /// @brief パッチバージョン値を取得する。
115  /// @return パッチバージョン値。
116  value_type patch() const
117  {
118  return (value % (PatchLimit + 1));
119  }
120 
121  /// @brief バージョン値を文字列化する。
122  /// @param[in] withoutPatch パッチバージョンを含めないならば true 。
123  /// @return バージョン文字列。 "1.02.03" 等。
124  std::wstring toString(bool withoutPatch = false) const;
125  };
126 
127  //--------------------
128  // インライン関数定義
129  //--------------------
130 
131  /// @brief 等価比較演算子のオーバロード。
132  /// @param[in] l 左辺値。
133  /// @param[in] r 右辺値。
134  /// @return 比較結果値。
135  /// @relatesalso Version
136  inline bool operator==(const Version& l, const Version& r)
137  {
138  return (l.value == r.value);
139  }
140 
141  /// @brief 非等価比較演算子のオーバロード。
142  /// @param[in] l 左辺値。
143  /// @param[in] r 右辺値。
144  /// @return 比較結果値。
145  /// @relatesalso Version
146  inline bool operator!=(const Version& l, const Version& r)
147  {
148  return !(l == r);
149  }
150 
151  /// @brief 小なり比較演算子のオーバロード。
152  /// @param[in] l 左辺値。
153  /// @param[in] r 右辺値。
154  /// @return 比較結果値。
155  /// @relatesalso Version
156  inline bool operator<(const Version& l, const Version& r)
157  {
158  return (l.value < r.value);
159  }
160 
161  /// @brief 大なり比較演算子のオーバロード。
162  /// @param[in] l 左辺値。
163  /// @param[in] r 右辺値。
164  /// @return 比較結果値。
165  /// @relatesalso Version
166  inline bool operator>(const Version& l, const Version& r)
167  {
168  return (r < l);
169  }
170 
171  /// @brief 小なり等価比較演算子のオーバロード。
172  /// @param[in] l 左辺値。
173  /// @param[in] r 右辺値。
174  /// @return 比較結果値。
175  /// @relatesalso Version
176  inline bool operator<=(const Version& l, const Version& r)
177  {
178  return !(r < l);
179  }
180 
181  /// @brief 大なり等価比較演算子のオーバロード。
182  /// @param[in] l 左辺値。
183  /// @param[in] r 右辺値。
184  /// @return 比較結果値。
185  /// @relatesalso Version
186  inline bool operator>=(const Version& l, const Version& r)
187  {
188  return !(l < r);
189  }
190 } // namespace amdaemon
191 
192 namespace std
193 {
194  // 前方宣言
195  template<class T> struct hash;
196 
197  /// @brief ハッシュ値を求めるファンクタ構造体。
198  ///
199  /// std::hash クラステンプレートの amdaemon::Version 構造体に対する特殊化。
200  template<>
201  struct hash< ::amdaemon::Version >
202  {
203  /// 戻り値の型。
204  typedef size_t result_type;
205 
206  /// 引数の型。
207  typedef ::amdaemon::Version argument_type;
208 
209  /// @brief 引数のハッシュ値を取得する。
210  /// @param[in] version 引数。
211  /// @return ハッシュ値。
212  result_type operator()(argument_type version) const
213  {
214  return static_cast<result_type>(version.value);
215  }
216  };
217 } // namespace std
218 
219 #endif // AMDAEMON_VERSION_H
::amdaemon::Version argument_type
引数の型。
Definition: Version.h:207
static const value_type PatchLimit
パッチバージョン値の最大許容値。
Definition: Version.h:30
bool operator>(const Version &l, const Version &r)
大なり比較演算子のオーバロード。
Definition: Version.h:166
size_t result_type
戻り値の型。
Definition: Version.h:204
static const value_type MinorLimit
マイナーバージョン値の最大許容値。
Definition: Version.h:33
static Version zero()
"0.00.00" のバージョン値を作成する。
Definition: Version.h:94
Definition: AccessCode.h:202
Daemonライブラリの環境定義を行うヘッダ。
bool operator>=(const Version &l, const Version &r)
大なり等価比較演算子のオーバロード。
Definition: Version.h:186
static Version make(value_type major, value_type minor, value_type patch=0)
各バージョン値からバージョン値を作成する。
bool operator<=(const Version &l, const Version &r)
小なり等価比較演算子のオーバロード。
Definition: Version.h:176
std::wstring toString(bool withoutPatch=false) const
バージョン値を文字列化する。
static bool canMake(value_type major, value_type minor, value_type patch=0)
バージョン値を作成可能な各バージョン値であるか否かを調べる。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
bool operator<(const Version &l, const Version &r)
小なり比較演算子のオーバロード。
Definition: Version.h:156
bool operator==(const Version &l, const Version &r)
等価比較演算子のオーバロード。
Definition: Version.h:136
value_type major() const
メジャーバージョン値を取得する。
Definition: Version.h:102
static const value_type MajorLimit
メジャーバージョン値の最大許容値。
Definition: Version.h:36
std::uint32_t value_type
内部値の表現型。
Definition: Version.h:27
value_type minor() const
マイナーバージョン値を取得する。
Definition: Version.h:109
value_type value
内部値。 libam のアプリバージョン値と同等のフォーマット。
Definition: Version.h:40
result_type operator()(argument_type version) const
引数のハッシュ値を取得する。
Definition: Version.h:212
bool operator!=(const Version &l, const Version &r)
非等価比較演算子のオーバロード。
Definition: Version.h:146
value_type patch() const
パッチバージョン値を取得する。
Definition: Version.h:116
バージョン値構造体。
Definition: Version.h:24