tools
読み取り中…
検索中…
一致する文字列を見つけられません
swing.h
[詳解]
1/**
2 * @file swing.h
3 * @brief 往復カウンタクラス
4 *
5 * 上限・下限の間を行き来する整数値を管理します。
6 * アニメーションや周期的な数値変化に利用できます。
7 */
8
9/**
10 * @brief 上下限の間を往復する整数カウンタ
11 *
12 * operator() を呼ぶたびに値が +1 または -1 され、
13 * 上限に達したら折り返して下降、下限に達したら折り返して上昇します。
14 *
15 * @code
16 * swing s(0, 3);
17 * for (int i = 0; i < 8; i++) std::cout << s() << " ";
18 * // 出力: 1 2 3 2 1 0 1 2
19 * @endcode
20 */
21class swing {
22public:
23 /**
24 * @brief コンストラクタ
25 * @param lower_bound カウンタの最小値
26 * @param upper_bound カウンタの最大値
27 */
28 swing(int lower_bound, int upper_bound) : lower_bound(lower_bound), upper_bound(upper_bound) {}
29
30 /**
31 * @brief カウンタを1ステップ進め、現在の値を返す
32 * @return 更新後の現在値
33 */
34 int operator()() {
35 if (up) {
36 if (value < upper_bound)
37 return ++value;
38 else {
39 up = false;
40 return --value;
41 }
42 } else {
43 if (value > lower_bound)
44 return --value;
45 else {
46 up = true;
47 return ++value;
48 }
49 }
50 }
51
52 /**
53 * @brief カウンタの現在値を直接設定する
54 * @param v 設定する値
55 * @return *this への参照
56 */
57 swing& operator=(int v) {
58 value = v;
59 return *this;
60 }
61
62 /**
63 * @brief 現在の整数値を取得する(`int v = +s;` のように使用)
64 * @return 現在の値
65 */
66 int operator+() const { return value; } // 以下のように値を抽出する i(int)+s(swing)
67private:
68 /// @brief 現在のカウンタ値
69 int value = 0;
70 /// @brief 下限値
71 int lower_bound;
72 /// @brief 上限値
73 int upper_bound;
74 /// @brief 現在上昇中かどうか
75 bool up = true;
76};
int operator()()
カウンタを1ステップ進め、現在の値を返す
Definition swing.h:34
swing & operator=(int v)
カウンタの現在値を直接設定する
Definition swing.h:57
swing(int lower_bound, int upper_bound)
コンストラクタ
Definition swing.h:28
int operator+() const
現在の整数値を取得する(int v = +s; のように使用)
Definition swing.h:66