template<class T>
concept queryable = destructible<T>;
概要
queryable
は、型T
がクエリ可能オブジェクトの制約を満たすことを表す説明専用のコンセプトである。
クエリ可能オブジェクト(queryable object)
クエリ可能オブジェクトは、クエリオブジェクトをキーとして対応する値を保持する、読み取り専用のKey/Valueデータ構造とみなせる。
execution::env<>{}
: 空のクエリ可能オブジェクトexecution::prop(q, v)
: キーq
と対応値v
を保持する最小のクエリ可能オブジェクトexecution::env{...}
: 複数のKey/Valueを保持するクエリ可能オブジェクトqueryable
コンセプトを満たすユーザ定義クラスのオブジェクト
実行制御ライブラリでは、下記のオブジェクトがクエリ可能オブジェクトとされる。
- Senderに関連付けられた属性(attributes)オブジェクト(
execution::get_env
で取得) - Receiverに関連付けられた環境(environment)オブジェクト(
execution::get_env
で取得) - Schedulerオブジェクト自身
クエリオブジェクト(query object)
クエリオブジェクトは、クエリ可能オブジェクトに対する問い合わせ(query)を行うカスタマイゼーションポイントオブジェクトである。
説明用のクエリオブジェクトq
、クエリ可能オブジェクトenv
、引数パックargs
としたとき
- 問い合わせ式
q(env, args...)
は、void
型であってはならない。 - 問い合わせ式
q(env, args...)
は、クエリオブジェクトや引数を変更せず、等しさを保持(equality-preserving)する。 - 式
env.query(q, args...)
が適格であれば、問い合わせ式q(env, args...)
と等価である。
モデル
説明用のenv
をEnv
型のオブジェクトとする。
呼び出し可能オブジェクトq
と部分式パックargs
に対して、requires { q(env, args...) }
がtrue
であれば、q(env, args...)
がq
に課されるセマンティック要件を満たす場合に、Env
はqueryable
のモデルである。
説明専用エンティティ
式MAKE-ENV
説明用のクエリオブジェクトq
と式v
に対して、式MAKE-ENV(q, v)
はqueryable
を満たす型の式env
となり、下記を満たす。
env.query(q)
の結果がv
と等しい。- 明に規定されない限り、
env
が有効の間はenv.query(q)
のオブジェクトも有効である。
式JOIN-ENV
説明用のクエリ可能オブジェクトenv1
, env2
、クエリオブジェクトq
、パック式as
に対して、式JOIN-ENV(env1, env2)
はqueryable
を満たす型の式env3
となり、式env3.query(q, as...)
は下記と等価である。
- 適格であるならば、式
env1.query(q, as...)
- そうではなく、適格であるならば、式
env2.query(q, as...)
- そうでなければ、式
env3.query(q, as...)
は不適格
備考
Senderに関連付けられたクエリ可能オブジェクトは「属性(attributes)」と呼ばれるが、実行制御ライブラリの仕様記述ではReceiverの「環境(environment)」と合わせてEnv
型や識別子名env
として包括的に言及される。
バージョン
言語
- C++26