コンテンツにスキップ

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に構築する - 未実装