最終更新日時(UTC):
が更新

履歴 編集

function template
<linalg>

std::linalg::layout_blas_packed::mapping::operator()(C++26)

template<class Index0, class Index1>
constexpr index_type operator() (Index0 ind0, Index1 ind1) const noexcept;

概要

2次元インデクス値ind0, ind1に対応する要素位置を求める。

テンプレートパラメータ制約

事前条件

iextents_type::index-cast(ind0)jextents_type::index-cast(ind1)としたとき、2次元インデクス値i, jは多次元配列サイズextents_における有効なインデクスであること。

戻り値

Nextetns_.extent(0)としたとき

  • i > jならば(*this)(j, i)、そうでなければ
  • 下記いずれの条件を満たすならばi + j * (j + 1)/2、そうでなければ
    • is_same_v<StorageOrder, column_major_t> && is_same_v<Triangle, upper_triangle_t>trueまたは
    • is_same_v<StorageOrder, row_major_t> && is_same_v<Triangle, lower_triangle_t>true
  • j + N * i - i * (i + 1)/2

例外

投げない

#include <cassert>
#include <mdspan>
#include <linalg>
namespace linalg = std::linalg;

int main()
{
  using Ext3x3 = std::extents<size_t, 3, 3>;
  linalg::layout_blas_packed<linalg::lower_triangle_t, linalg::column_major_t>::mapping<Ext3x3> map;
  // 0 1 2
  // 1 3 4
  // 2 4 5
  assert(map(0, 0) == 0);
  assert(map(0, 1) == 1);
  assert(map(2, 1) == 4);
}

出力

バージョン

言語

  • C++26

処理系

参照