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
*/
21
class
swing
{
22
public
:
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)
67
private
:
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
};
swing::operator()
int operator()()
カウンタを1ステップ進め、現在の値を返す
Definition
swing.h:34
swing::operator=
swing & operator=(int v)
カウンタの現在値を直接設定する
Definition
swing.h:57
swing::swing
swing(int lower_bound, int upper_bound)
コンストラクタ
Definition
swing.h:28
swing::operator+
int operator+() const
現在の整数値を取得する(int v = +s; のように使用)
Definition
swing.h:66
swing.h
構築:
1.14.0