mplate<class Source>
concept stoppable-source =
requires (Source& src, const Source csrc) {
{ csrc.get_token() } -> stoppable_token;
{ csrc.stop_possible() } noexcept -> same_as<bool>;
{ csrc.stop_requested() } noexcept -> same_as<bool>;
{ src.request_stop() } -> same_as<bool>;
};
概要
stoppable-source
は、型Source
が次のインタフェースを持つことを表す説明専用のコンセプトである。
- 停止トークンを取得する(
get_token
) - 停止可能か否かを問い合わせる(
stop_possible
) - 停止要求が行われたか否かを問い合わせる(
stop_requested
) - 停止要求を行う(
request_stop
)
stoppable-source
のモデルとなる型は、最初に停止要求が行われた時に呼び出される停止コールバックの登録リストを管理する。
モデル
stoppable-source
のモデルである型のオブジェクトは次を満たすこと。
- 最大で1つの関連付けられた停止状態を持つ。
- オブジェクト
s
が停止状態を持たない(disengaged)とき、s.stop_possible()
とs.stop_requested()
はfalse
となる。 - オブジェクト
t
が停止状態を持たないとき、t.get_token()
は停止状態を持たない停止トークンを返す。そうでなければ、t
の停止状態に関連付けられた停止トークンを返す。 request_stop
,stop_requested
,stop_possible
メンバ関数の呼び出しはデータ競合を引き起こさない。true
を返すrequest_stop
呼び出しは、stopppable_token
またはstoppable-source
オブジェクトにおけるtrue
を返すstop_requested
呼び出しに対して同期する。- コールバックの登録は、そのコールバック呼び出しに対して同期する。
stoppable-source
が停止状態を持たないとき、request_stop
は効果をもたずfalse
を返す。そうでなければ、関連づけられた停止状態に対して次の停止要求操作(stop request operation)を実行する。- 停止要求が行われたとき
request_stop
はtrue
を返す。そうでなければfalse
を返す。 request_stop
呼び出し後は、stop_possible
がfalse
を返すか、stop_requested
がtrue
を返す。
備考
- 停止状態に登録されたコールバック呼び出しの実行順序に制約は課されない。
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??