AM Daemon ライブラリリファレンス
UsbIO.h
[詳解]
1 /// @file
2 /// @brief USBの入出力処理を提供するMonostateクラス UsbIO のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_USBIO_H
7 #define AMDAEMON_USBIO_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/UsbIONode.h"
12 
13 #include <functional>
14 #include <vector>
15 #include <cstddef>
16 
17 namespace amdaemon
18 {
19 /// @addtogroup g_usbio
20 /// @{
21 
22  /// @brief USBの入出力処理を提供するMonostateクラス。
23  /// @see Input, Output
24  ///
25  /// Core クラスのメンバ関数 Core#execute 呼び出しによって内容が更新される。
26  ///
27  /// USBの生入力値を取得したり直接出力を行いたい場合に用いる。
28  /// ID付けされた入出力処理を行う場合はこのクラスではなく
29  /// Input クラスや Output クラスを用いること。
30  ///
31  /// Output クラスとは出力値を共有しており、
32  /// どちらか一方で設定した出力値はもう一方にも反映される。
33  ///
34  /// @ingroup g_common
35  class UsbIO
36  {
37  public:
38  // 下記は暗黙の定義を用いる。
39  //UsbIO() = default;
40  //‾UsbIO() = default;
41  //UsbIO(const UsbIO&) = default;
42  //UsbIO& operator=(const UsbIO&) = default;
43 
44  /// @brief USBの入出力機能を利用可能であるか否かを取得する。
45  /// @retval true 利用可能である場合。
46  /// @retval false 機能が無効である場合。
47  ///
48  /// 条件式 (getNodeCount() > 0) の結果を返す。
49  bool isAvailable() const
50  {
51  return (this->getNodeCount() > 0);
52  }
53 
54  /// @brief ノード数(USB I/O ボード数)を取得する。
55  /// @return ノード数(USB I/O ボード数)。
56  std::size_t getNodeCount() const;
57 
58  /// @brief ノード操作インスタンスを取得する。
59  /// @param[in] nodeIndex
60  /// ノードインデックス。Node1 が 0 、Node2 が 1 のように対応する。
61  /// @return ノード操作インスタンス。
62  ///
63  /// @exception Exception
64  /// 引数 nodeIndex にノード数以上の値を指定した場合。
65  /// ノード数はメンバ関数 #getNodeCount で取得できる。
66  UsbIONode& getNode(std::size_t nodeIndex);
67 
68  /// @copydoc getNode
69  const UsbIONode& getNode(std::size_t nodeIndex) const;
70 
71  /// @brief ノード操作インスタンス配列を取得する。
72  /// @return ノード操作インスタンス配列。
73  ///
74  /// 範囲for文や各種アルゴリズム関数に渡すことを想定している。
75  ///
76  /// - ノード数を知りたいだけならばメンバ関数 #getNodeCount を用いること。
77  /// - 特定ノードを取得したいだけならばメンバ関数 #getNode を用いること。
78  std::vector<std::reference_wrapper<UsbIONode>> getNodes()
79  {
80  return
81  ::amdaemon::util::toContainer<decltype(getNodes())>(
82  getNodeCount(),
83  [this](std::size_t i) -> UsbIONode& { return getNode(i); });
84  }
85 
86  /// @copydoc getNodes
87  std::vector<std::reference_wrapper<const UsbIONode>> getNodes() const
88  {
89  return
90  ::amdaemon::util::toContainer<decltype(getNodes())>(
91  getNodeCount(),
92  [this](std::size_t i) -> const UsbIONode& { return getNode(i); });
93  }
94  };
95 
96 /// @}
97 } // namespace amdaemon
98 
99 #endif // AMDAEMON_USBIO_H
USB I/O ボード単体の入出力処理を提供するクラス UsbIONode のヘッダ。
Daemonライブラリの環境定義を行うヘッダ。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
USB I/O ボード単体の入出力処理を提供するクラス。
Definition: UsbIONode.h:32
std::size_t getNodeCount() const
ノード数(USB I/O ボード数)を取得する。
コンテナクラス関連の便利処理を提供するヘッダ。
bool isAvailable() const
USBの入出力機能を利用可能であるか否かを取得する。
Definition: UsbIO.h:49
std::vector< std::reference_wrapper< UsbIONode > > getNodes()
ノード操作インスタンス配列を取得する。
Definition: UsbIO.h:78
UsbIONode & getNode(std::size_t nodeIndex)
ノード操作インスタンスを取得する。
USBの入出力処理を提供するMonostateクラス。
Definition: UsbIO.h:35
std::vector< std::reference_wrapper< const UsbIONode > > getNodes() const
ノード操作インスタンス配列を取得する。
Definition: UsbIO.h:87