AM Daemon ライブラリリファレンス
OutputUnit.h
[詳解]
1 /// @file
2 /// @brief カテゴリ単位のID付けされた出力処理を行うクラス OutputUnit のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_OUTPUTUNIT_H
7 #define AMDAEMON_OUTPUTUNIT_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/SwitchOutput.h"
11 #include "amdaemon/AnalogOutput.h"
12 #include "amdaemon/OutputId.h"
13 
14 #include <cstdint>
15 #include <cstddef>
16 
17 namespace amdaemon
18 {
19 /// @addtogroup g_io
20 /// @{
21 
22  // 内部クラスの前方宣言
23  class InnerIndexHolder;
24 
25  // ラッパクラスの前方宣言
26  class SwitchOutput;
27  class AnalogOutput;
28 
29  /// @brief カテゴリ単位のID付けされた出力処理を行うクラス。
30  /// @see Output, Player
31  ///
32  /// このクラスのインスタンスをアプリ側で直接生成することはできない。
33  /// Output クラスのメンバ関数 Output#getSystem および Output#getPlayer から取得すること。
34  ///
35  /// 出力識別ID値は文字列から作成できる。
36  /// アプリ実装においては、定数を定義してそれを用いることを推奨する。
37  ///
38  /// @code
39  /// namespace outputs
40  /// {
41  /// const amdaemon::OutputId CoinBlock = amdaemon::OutputId::make(L"coin_block");
42  /// }
43  /// @endcode
44  ///
45  /// 有効な出力識別IDそのものはDaemonプロセスの設定ファイルで定義する。
46  ///
47  /// スイッチ出力は SwitchOutput クラス、アナログ出力は AnalogOutput クラスで
48  /// それぞれラップして出力値を設定することを推奨する。
49  /// メンバ関数 #getSwitch および #getAnalog で各ラッパを取得できる。
50  ///
51  /// @ingroup g_player
52  class OutputUnit
53  {
54  public:
55  /// @brief コンストラクタ。
56  /// @note アプリ側からは利用できない。
57  explicit OutputUnit(InnerIndexHolder);
58 
59  // 下記は暗黙の定義を用いる。
60  //‾OutputUnit();
61 
62  /// @brief 指定した識別IDの出力が存在するか否かを取得する。
63  /// @param[in] id 出力識別ID。
64  /// @retval true 存在する場合。
65  /// @retval false 存在しない場合。
66  bool exists(const OutputId& id) const;
67 
68  /// @brief 出力値を設定する。
69  /// @param[in] id 出力識別ID。
70  /// @param[in] value 出力値。出力先デバイスにより値の意味は異なる。
71  /// @param[in] forceUpdate
72  /// 値が変化しない場合も更新要求するならば true 。既定値は false 。
73  ///
74  /// @exception Exception
75  /// - 引数 id に存在しない出力識別IDを指定した場合。
76  /// - 引数 value に有効範囲外の値を指定した場合。
77  void setValue(const OutputId& id, std::int64_t value, bool forceUpdate = false);
78 
79  /// @brief 現在出力値として設定されている値を取得する。
80  /// @param[in] id 出力識別ID。
81  /// @return 現在出力値として設定されている値。
82  ///
83  /// @exception Exception
84  /// 引数 id に存在しない出力識別IDを指定した場合。
85  ///
86  /// 現在ライブラリ内で保持している値を返す。
87  /// 起動直後などは、実デバイスにこの値が設定されているとは限らない。
88  std::int64_t getCurrentValue(const OutputId& id) const;
89 
90  /// @brief 出力値として有効な最小値を取得する。
91  /// @param[in] id 出力識別ID。
92  /// @return 出力値として有効な最小値。
93  ///
94  /// @exception Exception
95  /// 引数 id に存在しない出力識別IDを指定した場合。
96  std::int64_t getMinValue(const OutputId& id) const;
97 
98  /// @brief 出力値として有効な最大値を取得する。
99  /// @param[in] id 出力識別ID。
100  /// @return 出力値として有効な最大値。
101  ///
102  /// @exception Exception
103  /// 引数 id に存在しない出力識別IDを指定した場合。
104  std::int64_t getMaxValue(const OutputId& id) const;
105 
106  /// @brief スイッチ出力ラッパを取得する。
107  /// @param[in] id 出力識別ID。
108  /// @return スイッチ出力ラッパ。
109  ///
110  /// 引数 id に存在しない出力識別IDを指定した場合でもラッパを取得できる。
111  /// ただしラッパのメンバ関数 SwitchOutput#exists は false を返す。
112  inline SwitchOutput getSwitch(const OutputId& id)
113  {
114  return SwitchOutput(*this, id);
115  }
116 
117  /// @brief アナログ出力ラッパを取得する。
118  /// @param[in] id 出力識別ID。
119  /// @param[in] minValue 線形変換された最小値として用いる値。
120  /// @param[in] maxValue 線形変換された最大値として用いる値。
121  /// @return アナログ出力ラッパ。
122  ///
123  /// @exception Exception
124  /// 引数 minValue または maxValue に非数値(NAN等)を指定した場合。
125  ///
126  /// 引数 id に存在しない出力識別IDを指定した場合でもラッパを取得できる。
127  /// ただしラッパのメンバ関数 AnalogOutput#exists は false を返す。
129  const OutputId& id,
130  double minValue,
131  double maxValue)
132  {
133  return AnalogOutput(*this, id, minValue, maxValue);
134  }
135 
136  /// @brief アナログ出力ラッパを取得する。
137  /// @param[in] id 出力識別ID。
138  /// @param[in] maxValue 線形変換された最大値として用いる値。既定値は 1.0 。
139  /// @return アナログ出力ラッパ。
140  ///
141  /// @exception Exception
142  /// 引数 maxValue に非数値(NAN等)を指定した場合。
143  ///
144  /// 線形変換された最小値として用いる値は 0.0 とする。
145  ///
146  /// 引数 id に存在しない出力識別IDを指定した場合でもラッパを取得できる。
147  /// ただしラッパのメンバ関数 AnalogOutput#exists は false を返す。
148  inline AnalogOutput getAnalog(const OutputId& id, double maxValue = 1)
149  {
150  return AnalogOutput(*this, id, maxValue);
151  }
152 
153  private:
154  std::size_t _playerIndex; ///< プレイヤーインデックス。
155 
156  private:
157  // コピー禁止
158  OutputUnit(const OutputUnit&); // 宣言のみ
159  OutputUnit& operator=(const OutputUnit&); // 宣言のみ
160  };
161 
162 /// @}
163 } // namespace amdaemon
164 
165 #endif // AMDAEMON_OUTPUTUNIT_H
OutputUnit クラスにアナログ出力値を設定するラッパクラス。
Definition: AnalogOutput.h:24
カテゴリ単位のID付けされた出力処理を行うクラス。
Definition: OutputUnit.h:52
抽象出力の識別ID型 OutputId のヘッダ。
SwitchOutput getSwitch(const OutputId &id)
スイッチ出力ラッパを取得する。
Definition: OutputUnit.h:112
OutputUnit クラスにスイッチ出力値を設定するラッパクラス SwitchOutput のヘッダ。
Daemonライブラリの環境定義を行うヘッダ。
AnalogOutput getAnalog(const OutputId &id, double maxValue=1)
アナログ出力ラッパを取得する。
Definition: OutputUnit.h:148
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
OutputUnit クラスにアナログ出力値を設定するラッパクラス AnalogOutput のヘッダ。
void setValue(const OutputId &id, std::int64_t value, bool forceUpdate=false)
出力値を設定する。
bool exists(const OutputId &id) const
指定した識別IDの出力が存在するか否かを取得する。
std::int64_t getMaxValue(const OutputId &id) const
出力値として有効な最大値を取得する。
std::int64_t getCurrentValue(const OutputId &id) const
現在出力値として設定されている値を取得する。
OutputUnit クラスにスイッチ出力値を設定するラッパクラス。
Definition: SwitchOutput.h:56
AnalogOutput getAnalog(const OutputId &id, double minValue, double maxValue)
アナログ出力ラッパを取得する。
Definition: OutputUnit.h:128
OutputUnit(InnerIndexHolder)
コンストラクタ。
std::int64_t getMinValue(const OutputId &id) const
出力値として有効な最小値を取得する。