以下の内容はhttps://yohhoy.hatenadiary.jp/entry/20240805/p1より取得しました。


std::submdspanとメモリレイアウト変換

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のとき
    1. レイアウト互換ならば、layout_{left,right}を維持
    2. レイアウト互換ならば、layout_{left,right}_paddedに変換(降格)
    3. layout_strideに変換(降格)
  • layout_left_padded, layout_right_paddedのとき
    1. 変換元が0次元(→id:yohhoy:20230309)のとき、layout_{left,right}_paddedを維持*1
    2. レイアウト互換ならば、layout_{left,right}に変換(昇格)*2
    3. レイアウト互換ならば、layout_{left,right}_paddedを維持
    4. layout_strideに変換(降格)
  • layout_strideのとき
    1. layout_strideを維持

ノート:C++2c標準ライブラリ提供メモリレイアウト型は、その型情報として layout_LRlayout_LR_paddedlayout_stride の順で強い制約条件を表す(LR := leftright)。

関連URL

*1:レイアウトとしては layout_{left,right} 型に昇格可能だが、他メモリレイアウト型における変換元=0次元の挙動に揃えたと考えられる。

*2:この変換条件を満たすのは、変換先=1次元以下かつ要素連続配置が保証されるケースに限られる。




以上の内容はhttps://yohhoy.hatenadiary.jp/entry/20240805/p1より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14