AM Daemon ライブラリリファレンス
WinsockScope.h
[詳解]
1 /// @file
2 /// @brief Winsockの初期化と解放を行うRAIIクラス WinsockScope のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_UTIL_WINSOCKSCOPE_H
7 #define AMDAEMON_UTIL_WINSOCKSCOPE_H
8 
9 #include "amdaemon/env.h"
10 
11 namespace amdaemon
12 {
13 namespace util
14 {
15 /// @addtogroup g_util
16 /// @{
17 
18  /// @brief Winsockの初期化と解放を行うRAIIクラス。
19  ///
20  /// コンストラクタで Windows API 関数 WSAStartup を呼び出し、
21  /// デストラクタで Windows API 関数 WSACleanup を呼び出す。
22  /// これらの Windows API 関数は内部で参照カウンタを保持しているため、
23  /// このクラスのインスタンスを入れ子になった関数等で定義しても問題ない。
24  ///
25  /// 非Windows環境では何も行わない。
27  {
28  private:
29  // safe bool イディオム
30  typedef void (WinsockScope::*bool_type)() const;
31  void bool_type_func() const { }
32 
33  public:
34  /// @brief コンストラクタ。
35  /// @param[in] major 要求するメジャーバージョン番号。既定値は 2 。
36  /// @param[in] minor 要求するマイナーバージョン番号。既定値は 0 。
37  ///
38  /// Windows環境であれば Windows API 関数 WSAStartup を呼び出す。
39  /// 処理の成否はメンバ関数 valid で取得できる。
40  WinsockScope(int major = 2, int minor = 0);
41 
42  /// @brief ムーブコンストラクタ。
43  /// @param[in] src ムーブ元。
45 
46  /// @brief デストラクタ。
47  ///
48  /// Windows環境であり、コンストラクタの処理に成功しており、
49  /// かつムーブされていなければ Windows API 関数 WSACleanup を呼び出す。
51 
52  /// @brief ムーブ代入演算子のオーバロード。
53  /// @param[in] r 右辺値。
54  /// @return 自身の参照。
56 
57  /// @brief コンストラクタ処理の成否を取得する。
58  /// @retval true 成功したか、非Windows環境である場合。
59  /// @retval false 失敗した場合。
60  bool valid() const
61  {
62  return (getErrorCode() == 0);
63  }
64 
65  /// @brief Windows API 関数 WSAStartup の戻り値を取得する。
66  /// @return Windows API 関数 WSAStartup の戻り値。非Windows環境では常に 0 。
67  int getErrorCode() const
68  {
69  return _errorCode;
70  }
71 
72  /// @brief コンストラクタ処理の成否を表す真偽値相当の値への型変換関数。
73  /// @return メンバ関数 valid の戻り値と同等の値。
74  /// @note
75  /// ライブラリ実装メモ:
76  /// VC++2012 は explicit operator をサポートしていないため、
77  /// safe bool イディオムを用いている。
78  operator bool_type() const
79  {
80  return valid() ? &WinsockScope::bool_type_func : nullptr;
81  }
82 
83  private:
84  int _errorCode; ///< Windows API 関数 WSAStartup の戻り値。
85  bool _cleanup; ///< Windows API 関数 WSACleanup を呼び出すべきならば true 。
86 
87  private:
88  // コピー禁止
89  WinsockScope(const WinsockScope&); // 宣言のみ
90  WinsockScope& operator=(const WinsockScope&); // 宣言のみ
91  };
92 
93 /// @}
94 } // namespace util
95 } // namespace amdaemon
96 
97 #endif // AMDAEMON_UTIL_WINSOCKSCOPE_H
WinsockScope & operator=(WinsockScope &&r)
ムーブ代入演算子のオーバロード。
Daemonライブラリの環境定義を行うヘッダ。
int getErrorCode() const
Windows API 関数 WSAStartup の戻り値を取得する。
Definition: WinsockScope.h:67
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
WinsockScope(int major=2, int minor=0)
コンストラクタ。
bool valid() const
コンストラクタ処理の成否を取得する。
Definition: WinsockScope.h:60
Winsockの初期化と解放を行うRAIIクラス。
Definition: WinsockScope.h:26
‾WinsockScope()
デストラクタ。