AM Daemon ライブラリリファレンス
IpAddress.h
[詳解]
1 /// @file
2 /// @brief IPv4のIPアドレスを表す構造体 IpAddress のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_UTIL_IPADDRESS_H
7 #define AMDAEMON_UTIL_IPADDRESS_H
8 
9 #include "amdaemon/env.h"
10 
11 #include <string>
12 #include <cstdint>
13 #include <cstddef>
14 
15 namespace amdaemon
16 {
17 namespace util
18 {
19 /// @addtogroup g_util
20 /// @{
21 
22  //--------------------
23  // IpAddress 構造体定義
24  //--------------------
25 
26  /// @brief IPv4のIPアドレスを表す構造体。
27  /// @note memcpy 可能。
28  /// @ingroup g_network
29  struct IpAddress
30  {
31  /// 内部値の表現型。
32  typedef std::uint32_t value_type;
33 
34  /// ネットワークバイトオーダーのIPアドレス直値。
35  value_type value;
36 
37  /// @brief "0.0.0.0" のIPアドレス値を作成する。
38  /// @return "0.0.0.0" のIPアドレス値。
39  static IpAddress zero()
40  {
41  IpAddress result = { 0 };
42  return result;
43  }
44 
45  /// @brief ホストバイトオーダーのIPアドレス直値からIPアドレス値を作成する。
46  /// @param[in] hostValue ホストバイトオーダーのIPアドレス直値。
47  /// @return 作成されたIPアドレス値。
48  static IpAddress make(value_type hostValue);
49 
50  /// @brief IPアドレス値を作成可能な各オクテット値であるか否かを調べる。
51  /// @param[in] octet1 第1オクテット値。 0 以上 255 以下。
52  /// @param[in] octet2 第2オクテット値。 0 以上 255 以下。
53  /// @param[in] octet3 第3オクテット値。 0 以上 255 以下。
54  /// @param[in] octet4 第4オクテット値。 0 以上 255 以下。
55  /// @retval true 作成可能である場合。
56  /// @retval false 作成不可能である場合。
57  /// @see make(value_type, value_type, value_type, value_type)
58  ///
59  /// この関数が true を返す場合、同じ引数を静的メンバ関数
60  /// make(value_type, value_type, value_type, value_type) に渡すことで、
61  /// 例外を発生させることなくIPアドレス値を作成可能であることが保証される。
62  static bool canMake(
63  value_type octet1,
64  value_type octet2,
65  value_type octet3,
66  value_type octet4);
67 
68  /// @brief 各オクテット値からIPアドレス値を作成する。
69  /// @param[in] octet1 第1オクテット値。 0 以上 255 以下。
70  /// @param[in] octet2 第2オクテット値。 0 以上 255 以下。
71  /// @param[in] octet3 第3オクテット値。 0 以上 255 以下。
72  /// @param[in] octet4 第4オクテット値。 0 以上 255 以下。
73  /// @return 作成されたIPアドレス値。
74  /// @see canMake(value_type, value_type, value_type, value_type)
75  ///
76  /// @exception Exception
77  /// いずれかの引数に 255 よりも大きい値を指定した場合。
78  static IpAddress make(
79  value_type octet1,
80  value_type octet2,
81  value_type octet3,
82  value_type octet4);
83 
84  /// @brief IPアドレス値を作成可能なIPアドレス文字列であるか否かを調べる。
85  /// @param[in] address IPアドレス文字列。 "192.168.0.1" 等。
86  /// @retval true 作成可能である場合。
87  /// @retval false 作成不可能である場合。
88  /// @see make(const wchar_t*)
89  ///
90  /// この関数が true を返す場合、同じ引数を静的メンバ関数
91  /// make(const wchar_t*) に渡すことで、
92  /// 例外を発生させることなくIPアドレス値を作成可能であることが保証される。
93  static bool canMake(const wchar_t* address);
94 
95  /// @brief IPアドレス文字列からIPアドレス値を作成する。
96  /// @param[in] address IPアドレス文字列。 "192.168.0.1" 等。
97  /// @return 作成されたIPアドレス値。
98  /// @see canMake(const wchar_t*)
99  ///
100  /// @exception Exception
101  /// - 引数 address に nullptr を指定した場合。
102  /// - 引数 address をIPアドレス値に変換できなかった場合。
103  static IpAddress make(const wchar_t* address);
104 
105  /// @brief ホストバイトオーダーのIPアドレス直値を取得する。
106  /// @return ホストバイトオーダーのIPアドレス直値。
107  value_type getHostValue() const;
108 
109  /// @brief オクテット値を取得する。
110  /// @param[in] index オクテットインデックス。 0 以上 3 以下。
111  /// @return オクテット値。
112  ///
113  /// @exception Exception
114  /// 引数 index に 4 以上の値を指定した場合。
115  value_type getOctet(std::size_t index) const;
116 
117  /// @brief 文字列表現値を作成する。
118  /// @return 文字列表現値。
119  std::wstring toString() const;
120 
121  /// @brief ビット積代入演算子のオーバロード。
122  /// @param[in] r 右辺値。
123  /// @return 自身の参照。
125  {
126  this->value &= r.value;
127  return *this;
128  }
129 
130  /// @brief ビット和代入演算子のオーバロード。
131  /// @param[in] r 右辺値。
132  /// @return 自身の参照。
134  {
135  this->value |= r.value;
136  return *this;
137  }
138  };
139 
140 /// @}
141 
142  //--------------------
143  // インライン関数定義
144  //--------------------
145 
146  /// @brief ビット反転演算子のオーバロード。
147  /// @param[in] r 右辺値。
148  /// @return 演算結果値。
149  /// @relatesalso IpAddress
150  inline IpAddress operator‾(const IpAddress& r)
151  {
152  IpAddress result = { ‾r.value };
153  return result;
154  }
155 
156  /// @brief ビット積演算子のオーバロード。
157  /// @param[in] l 左辺値。
158  /// @param[in] r 右辺値。
159  /// @return 演算結果値。
160  /// @relatesalso IpAddress
161  inline IpAddress operator&(const IpAddress& l, const IpAddress& r)
162  {
163  IpAddress result = { l.value & r.value };
164  return result;
165  }
166 
167  /// @brief ビット和演算子のオーバロード。
168  /// @param[in] l 左辺値。
169  /// @param[in] r 右辺値。
170  /// @return 演算結果値。
171  /// @relatesalso IpAddress
172  inline IpAddress operator|(const IpAddress& l, const IpAddress& r)
173  {
174  IpAddress result = { l.value | r.value };
175  return result;
176  }
177 
178  /// @brief 等価比較演算子のオーバロード。
179  /// @param[in] l 左辺値。
180  /// @param[in] r 右辺値。
181  /// @return 比較結果値。
182  /// @relatesalso IpAddress
183  inline bool operator==(const IpAddress& l, const IpAddress& r)
184  {
185  return (l.value == r.value);
186  }
187 
188  /// @brief 非等価比較演算子のオーバロード。
189  /// @param[in] l 左辺値。
190  /// @param[in] r 右辺値。
191  /// @return 比較結果値。
192  /// @relatesalso IpAddress
193  inline bool operator!=(const IpAddress& l, const IpAddress& r)
194  {
195  return !(l == r);
196  }
197 
198  /// @brief 小なり比較演算子のオーバロード。
199  /// @param[in] l 左辺値。
200  /// @param[in] r 右辺値。
201  /// @return 比較結果値。
202  /// @relatesalso IpAddress
203  ///
204  /// ホストバイトオーダーでの大小を比較する。
205  inline bool operator<(const IpAddress& l, const IpAddress& r)
206  {
207  return (l.getHostValue() < r.getHostValue());
208  }
209 
210  /// @brief 大なり比較演算子のオーバロード。
211  /// @param[in] l 左辺値。
212  /// @param[in] r 右辺値。
213  /// @return 比較結果値。
214  /// @relatesalso IpAddress
215  ///
216  /// ホストバイトオーダーでの大小を比較する。
217  inline bool operator>(const IpAddress& l, const IpAddress& r)
218  {
219  return (r < l);
220  }
221 
222  /// @brief 小なり等価比較演算子のオーバロード。
223  /// @param[in] l 左辺値。
224  /// @param[in] r 右辺値。
225  /// @return 比較結果値。
226  /// @relatesalso IpAddress
227  ///
228  /// ホストバイトオーダーでの大小を比較する。
229  inline bool operator<=(const IpAddress& l, const IpAddress& r)
230  {
231  return !(r < l);
232  }
233 
234  /// @brief 大なり等価比較演算子のオーバロード。
235  /// @param[in] l 左辺値。
236  /// @param[in] r 右辺値。
237  /// @return 比較結果値。
238  /// @relatesalso IpAddress
239  ///
240  /// ホストバイトオーダーでの大小を比較する。
241  inline bool operator>=(const IpAddress& l, const IpAddress& r)
242  {
243  return !(l < r);
244  }
245 } // namespace util
246 } // namespace amdaemon
247 
248 #endif // AMDAEMON_UTIL_IPADDRESS_H
static IpAddress make(value_type hostValue)
ホストバイトオーダーのIPアドレス直値からIPアドレス値を作成する。
bool operator<(const IpAddress &l, const IpAddress &r)
小なり比較演算子のオーバロード。
Definition: IpAddress.h:205
IpAddress operator|(const IpAddress &l, const IpAddress &r)
ビット和演算子のオーバロード。
Definition: IpAddress.h:172
IpAddress operator&(const IpAddress &l, const IpAddress &r)
ビット積演算子のオーバロード。
Definition: IpAddress.h:161
static IpAddress zero()
"0.0.0.0" のIPアドレス値を作成する。
Definition: IpAddress.h:39
bool operator!=(const IpAddress &l, const IpAddress &r)
非等価比較演算子のオーバロード。
Definition: IpAddress.h:193
IPv4のIPアドレスを表す構造体。
Definition: IpAddress.h:29
static bool canMake(value_type octet1, value_type octet2, value_type octet3, value_type octet4)
IPアドレス値を作成可能な各オクテット値であるか否かを調べる。
IpAddress operator‾(const IpAddress &r)
ビット反転演算子のオーバロード。
Definition: IpAddress.h:150
IpAddress & operator&=(const IpAddress &r)
ビット積代入演算子のオーバロード。
Definition: IpAddress.h:124
Daemonライブラリの環境定義を行うヘッダ。
bool operator<=(const IpAddress &l, const IpAddress &r)
小なり等価比較演算子のオーバロード。
Definition: IpAddress.h:229
bool operator>=(const IpAddress &l, const IpAddress &r)
大なり等価比較演算子のオーバロード。
Definition: IpAddress.h:241
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
value_type getHostValue() const
ホストバイトオーダーのIPアドレス直値を取得する。
std::wstring toString() const
文字列表現値を作成する。
bool operator>(const IpAddress &l, const IpAddress &r)
大なり比較演算子のオーバロード。
Definition: IpAddress.h:217
bool operator==(const IpAddress &l, const IpAddress &r)
等価比較演算子のオーバロード。
Definition: IpAddress.h:183
std::uint32_t value_type
内部値の表現型。
Definition: IpAddress.h:32
value_type value
ネットワークバイトオーダーのIPアドレス直値。
Definition: IpAddress.h:35
value_type getOctet(std::size_t index) const
オクテット値を取得する。
IpAddress & operator|=(const IpAddress &r)
ビット和代入演算子のオーバロード。
Definition: IpAddress.h:133