Yu.Tuples
Yu.Tuplesは,タプルとしてアクセス可能な型(Tuple)を統一的に扱う機能群を提供する.
C++標準ライブラリの<ranges>と<algorithm>が提供する操作を,RangeではなくTupleに対して同様に適用できる.
例えば,<ranges>が提供するRangeアダプタやビュー,<algorithm>が提供する各アルゴリズムを,Tupleに対して同じ構文で利用できる.
なお,このライブラリでは,"Tuple"という語をyu::tuples::tupleコンセプトで定義している.
用語"Tuple"とyu::tuples::tupleコンセプト,std::tupleを混同しないよう注意すること.
基本機能
Tupleコンセプト
| 名前 | 説明 | バージョン | 状態 |
|---|---|---|---|
yu::tuples::tuple |
Tupleを定義するコンセプト | - | 完成 |
yu::tuples::tuple_structured |
タプルとしてアクセス可能 | - | 完成 |
アクセス
| 名前 | 説明 | バージョン | 状態 |
|---|---|---|---|
yu::tuples::get |
Tupleの要素にアクセスする | - | 完成 |
yu::tuples::size |
Tupleの要素数を取得する | - | 完成 |
yu::tuples::element_type |
Tupleの要素の型を取得する | - | 完成 |
カスタマイゼーションポイント
| 名前 | 説明 | バージョン | 状態 |
|---|---|---|---|
yu::tuples::known_tuple |
構造検査を省略してTupleとみなす型を明示する | - | 完成 |
コンセプト
Tupleに対する制約
| 名前 | 説明 | バージョン | 状態 |
|---|---|---|---|
yu::tuples::applicable |
Tupleを展開して関数呼び出し可能 | - | 未実装 |
yu::tuples::nothrow_applicable |
Tupleを展開して例外を投げずに関数呼び出し可能 | - | 未実装 |
Tupleの各要素に対する制約
| 名前 | 説明 | バージョン | 状態 |
|---|---|---|---|
yu::tuples::elementwise_invocable |
各要素に対して呼び出しが可能 | - | 未実装 |
yu::tuples::elementwise_nothrow_invocable |
各要素に対して例外を投げずに呼び出しが可能 | - | 未実装 |
yu::tuples::elementwise_regular_invocable |
各要素に対して正則に呼び出しが可能 | - | 未実装 |
yu::tuples::elementwise_predicate |
各要素に対する述語 | - | 未実装 |
型トレイト
| 名前 | 説明 | バージョン | 状態 |
|---|---|---|---|
yu::tuples::index_sequence_for |
Tupleと同じ長さの0から始まるstd::index_sequenceを作る |
- | 未実装 |
アルゴリズム
Yu.Tuplesでは,標準ライブラリの<algorithm>がRangeに対して提供するものに対して,その対象をTupleへ写したアルゴリズムを提供する.
ただし,TupleとRangeの性質の差異によって,提供されるアルゴリズムの有無やシグネチャの形は,<algorithm>のそれと必ずしも一致しない.
例えば,Rangeは実行時にイテレータでアクセスできるが,Tupleへのアクセスではコンパイル時にインデックスが決定している必要があり,この制約によって提供されていないアルゴリズムが存在する.
また,<algorithm>では結果を出力イテレータに出力するアルゴリズムが,Yu.Tuplesでは結果を戻り値として返すことがある.
なお,どのアルゴリズムも,ADLで発見されないように定義されている. また,型レベルで事前に結果を計算できるときは,実際の処理を省略することがある.
Tupleを変更しないアルゴリズム
| 名前 | 説明 | バージョン | 状態 |
|---|---|---|---|
yu::tuples::all_of |
全ての要素が条件を満たしているか調べる | - | 未実装 |
yu::tuples::any_of |
少なくとも1つの要素が条件を満たしているか調べる | - | 未実装 |
yu::tuples::none_of |
どの要素も条件を満たしていないか調べる | - | 未実装 |
yu::tuples::contains |
指定された要素を含むことを調べる | - | 未実装 |
yu::tuples::contains_slice |
指定されたTupleを含むことを調べる | - | 未実装 |
yu::tuples::for_each |
全ての要素に対して処理を行う | - | 未実装 |
yu::tuples::for_each_n |
最初のN個の要素に対して処理を行う | - | 未実装 |
yu::tuples::count |
指定された値と等しい要素を数える | - | 未実装 |
yu::tuples::count_if |
指定された条件を満たす要素を数える | - | 未実装 |
yu::tuples::equal |
2つのTupleを等値比較する | - | 未実装 |
yu::tuples::starts_with |
先頭が指定されたTupleと一致するか調べる | - | 未実装 |
yu::tuples::ends_with |
末尾が指定されたTupleと一致するか調べる | - | 未実装 |
Tupleの要素を畳み込むアルゴリズム
| 名前 | 説明 | バージョン | 状態 |
|---|---|---|---|
yu::tuples::fold_left |
左(先頭)からの畳み込み | - | 未実装 |
yu::tuples::fold_right |
右(終端)からの畳み込み | - | 未実装 |
yu::tuples::fold_left_first |
左(先頭)からの畳み込み.初期値を省略する | - | 未実装 |
yu::tuples::fold_right_last |
右(終端)からの畳み込み.初期値を省略する | - | 未実装 |
Tupleを変更するアルゴリズム
| 名前 | 説明 | バージョン | 状態 |
|---|---|---|---|
yu::tuples::swap_tuples |
指定された2つのTupleを要素ごとにswapする | - | 未実装 |
yu::tuples::transform |
全ての要素に関数を適用する | - | 未実装 |
yu::tuples::replace |
指定された値と一致する要素を指定された値に置き換える | - | 未実装 |
yu::tuples::replace_if |
条件を満たす要素を指定された値に置き換える | - | 未実装 |
yu::tuples::fill_n |
指定された値を出力先Tupleへ指定された個数だけ書き込む | - | 未実装 |
yu::tuples::generate_n |
関数の結果を出力先Tupleへ指定された個数だけ書き込む | - | 未実装 |
yu::tuples::reverse |
要素の並びを逆にする | - | 未実装 |
yu::tuples::rotate |
要素の並びを回転させる | - | 未実装 |
Tupleを構築するアルゴリズム
| 名前 | 説明 | バージョン | 状態 |
|---|---|---|---|
yu::tuples::copy |
指定されたTupleの要素をコピーしTupleを構築する | - | 未実装 |
yu::tuples::copy_n |
指定された数の要素をコピーしTupleを構築する | - | 未実装 |
yu::tuples::move |
指定されたTupleの要素をムーブしTupleを構築する | - | 未実装 |
yu::tuples::replace_copy |
指定された値と一致する要素を指定された値に置き換え、その結果をTupleに構築する | - | 未実装 |
yu::tuples::reverse_copy |
要素の並びを逆にし、その結果をTupleに構築する | - | 未実装 |
yu::tuples::rotate_copy |
要素の並びを回転させ、その結果をTupleに構築する | - | 未実装 |