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