最終更新日時:
が更新

履歴 編集

class template
<simd>

std::simd::basic_mask(C++26)

namespace std::simd {
  template<std::size_t Bytes, class Abi>
  class basic_mask;

  template<simd-size-type N, class T = /*see below*/>
  using mask = basic_mask</*see below*/>;
}

概要

basic_maskは、basic_vecの各要素に対応する真偽値(bool)をまとめて保持するデータ並列型である。比較演算子の結果や、要素ごとの条件選択(select)などで用いられる。

basic_mask<Bytes, Abi>は、Bytesが対応する要素型のサイズ、AbiがABIタグを表す。要素数は対応するbasic_vecと一致する。通常は、対応するbasic_vecmask_typeメンバや、要素数を指定する別名maskを通じて利用する。

  • Bytes: 対応する要素型のバイトサイズ。ある「vectorizable type」Tについてsizeof(T)と等しくなければならない
  • Abi: 要素数と内部表現を決定するABIタグ型

有効な特殊化・無効な特殊化

basic_mask<Bytes, Abi>の各特殊化は、対応する有効なbasic_vecが存在するとき「有効」(enabled)となる。有効なbasic_maskトリビアルコピー可能である。無効な特殊化は、デフォルトコンストラクタ・デストラクタ・コピーコンストラクタ・コピー代入演算子がすべてdelete定義され、メンバとしてはvalue_typeabi_typeのみを持つ。

メンバ関数

構築/代入

名前 説明 対応バージョン
(constructor) コンストラクタ C++26
(destructor) デストラクタ(トリビアル) C++26

イテレータ

名前 説明 対応バージョン
begin 先頭要素を指すイテレータを取得する C++26
end 番兵を取得する C++26
cbegin 先頭要素を指す読み取り専用イテレータを取得する C++26
cend 番兵を取得する C++26

要素アクセス

名前 説明 対応バージョン
operator[] 要素または要素の並べ替えを取得する C++26

単項演算子

名前 説明 対応バージョン
operator! 論理反転 C++26
operator+ 単項プラス(basic_vecへ変換) C++26
operator- 単項マイナス(basic_vecへ変換) C++26
operator~ ビット反転(basic_vecへ変換) C++26

変換

名前 説明 対応バージョン
operator basic_vec basic_vecへの変換 C++26
to_bitset std::bitsetへ変換する C++26
to_ullong unsigned long longへ変換する C++26

静的メンバ変数

名前 説明 対応バージョン
size 要素数を表すstd::integral_constant C++26

メンバ型

名前 説明 対応バージョン
value_type bool C++26
abi_type ABIタグ型Abi C++26
iterator イテレータ型(説明専用) C++26
const_iterator 読み取り専用イテレータ型(説明専用) C++26

非メンバ(Hidden friends)関数

二項論理・ビット演算子

名前 説明 対応バージョン
operator&& 論理積 C++26
operator|| 論理和 C++26
operator& ビット論理積 C++26
operator| ビット論理和 C++26
operator^ ビット排他的論理和 C++26

複合代入演算子

名前 説明 対応バージョン
operator&= ビット論理積の複合代入 C++26
operator|= ビット論理和の複合代入 C++26
operator^= ビット排他的論理和の複合代入 C++26

比較演算子

名前 説明 対応バージョン
operator== 等値比較 C++26
operator!= 非等値比較 C++26
operator>= 以上を判定する C++26
operator<= 以下を判定する C++26
operator> より大きいかを判定する C++26
operator< より小さいかを判定する C++26

#include <simd>
#include <print>

namespace simd = std::simd;

int main()
{
  simd::vec<int, 4> a([](int i) { return i; });  // {0, 1, 2, 3}

  // 比較演算子の結果はマスクとして得られる
  simd::vec<int, 4>::mask_type m = (a < 2);       // {true, true, false, false}

  for (int i = 0; i < m.size(); ++i) {
    std::print("{} ", m[i]);
  }
  std::println("");
}

出力

true true false false 

バージョン

言語

  • C++26

処理系

関連項目

参照