template<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++: ??