C++2c(C++26)多次元部分ビューstd::submdspan
(→id:yohhoy:20240201)によるメモリレイアウト変換のチートシート。
変換結果std::mdspan<T,E,L,A>
(→id:yohhoy:20230303)のレイアウトポリシーL
は、変換元レイアウトマッピングのsubmdspan_mapping
カスタマイズポイントにより下記ルールにて導出される:
layout_left
,layout_right
のとき- レイアウト互換ならば、
layout_{left,right}
を維持 - レイアウト互換ならば、
layout_{left,right}_padded
に変換(降格) layout_stride
に変換(降格)
- レイアウト互換ならば、
layout_left_padded
,layout_right_padded
のとき- 変換元が0次元(→id:yohhoy:20230309)のとき、
layout_{left,right}_padded
を維持*1 - レイアウト互換ならば、
layout_{left,right}
に変換(昇格)*2 - レイアウト互換ならば、
layout_{left,right}_padded
を維持 layout_stride
に変換(降格)
- 変換元が0次元(→id:yohhoy:20230309)のとき、
layout_stride
のときlayout_stride
を維持
ノート:C++2c標準ライブラリ提供メモリレイアウト型は、その型情報として layout_LR
> layout_LR_padded
> layout_stride
の順で強い制約条件を表す(LR
:= left
/right
)。
関連URL
- P2630R4 Submdspan
- (PDF)P2642R6 Padded mdspan layouts
- cpprefjp: std::submdspan