namespace std {
template<class Extents>
class layout_stride::mapping;
}
概要
layout_stride::mapping<E>は、extents型の多次元配列サイズEをパラメータとして、次元毎に任意ストライド幅を指定したレイアウトマッピングを表現するクラスである。
layout_stride::mapping<E>はトリビアルコピー可能であり、regularのモデルである。
説明専用メンバ変数
layout_stride::mappingクラステンプレートは、下記の説明専用メンバ変数を保持する。
extents_:extents_type型の多次元配列サイズ情報strides_:array<index_type, extents_type::rank()>型のストライド幅配列
また下記の説明専用静的メンバ変数を保持する。
rank_:size_t型の定数extents_type::rank()
適格要件
Extentsはextentsの特殊化であること。Extents::rank_dynamic() == 0がtrueのとき、多次元インデックス空間Extents()のサイズがExtents::index_type型で表現できること。
メンバ関数
構築・破棄
| 名前 | 説明 | 対応バージョン |
|---|---|---|
(constructor) |
コンストラクタ | C++23 |
(destructor) |
デストラクタ | C++23 |
operator= |
コピー代入演算子 | C++23 |
観測
| 名前 | 説明 | 対応バージョン |
|---|---|---|
extents |
多次元配列のサイズextents_を取得する |
C++23 |
strides |
ストライド配列strides_を取得する |
C++23 |
required_span_size |
要素アクセス範囲を取得する | C++23 |
operator() |
多次元配列インデックスから要素位置へ変換する | C++23 |
is_exhaustive |
Exhaustive特性を取得する | C++23 |
stride |
指定次元のストライド幅を取得する | C++23 |
静的メンバ関数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
is_always_unique |
trueを返す |
C++23 |
is_always_exhaustive |
rank() == 0、または静的要素数が0の次元が存在すればtrue、そうでなければfalseを返す(C++23では常にfalse、C++26で変更) |
C++23 |
is_always_strided |
trueを返す |
C++23 |
is_unique |
trueを返す |
C++23 |
is_strided |
trueを返す |
C++23 |
メンバ型
| 名前 | 説明 | 対応バージョン |
|---|---|---|
extents_type |
Extents |
C++23 |
index_type |
Extents::index_type |
C++23 |
size_type |
Extents::size_type |
C++23 |
rank_type |
Extents::rank_type |
C++23 |
layout_type |
layout_stride |
C++23 |
非メンバ(Hidden friends)関数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
submdspan_mapping |
submdspanサポート |
C++26 |
比較演算子
| 名前 | 説明 | 対応バージョン |
|---|---|---|
operator== |
等値比較 | C++23 |
operator!= |
非等値比較 (==により使用可能) |
C++23 |
例
#include <mdspan>
#include <array>
#include <iostream>
int main()
{
double arr[] = {1, 2, 3, 0, 4, 5, 6, 0};
// 要素数2x3の2次元配列/パディングあり行優先レイアウト
using Ext2x3 = std::extents<size_t, 2, 3>;
using Mapping = std::layout_stride::mapping<Ext2x3>;
std::array strides{4, 1};
std::mdspan mat{arr, Mapping{{}, strides}};
for (size_t i = 0; i < mat.extent(0); ++i) {
for (size_t j = 0; j < mat.extent(1); ++j) {
std::cout << (j ? " " : "") << mat[i, j];
}
std::cout << "\n";
}
}
出力
1 2 3
4 5 6
バージョン
言語
- C++23
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??
関連項目
参照
- P0009R18 MDSPAN
- P2630R4 Submdspan
- LWG Issue 4266.
layout_stride::mappingshould treat empty mappings as exhaustive- C++26で、
is_always_exhaustive()がrank() == 0や静的要素数0の次元を持つ場合にtrueを返すよう変更された(C++23では常にfalse)。あわせてis_exhaustive()も多次元インデックス空間が空の場合にtrueを返すよう拡張された
- C++26で、