src/cplib/collections/staticbitset_avx2

  Source   Edit

AVX2で論理演算・シフト・ビット数の集計を高速化した固定長ビット集合です。 amd64のAVX2対応CPUとGCC/Clangが必要です。C/C++バックエンドに対応します。 initBitSet(3000) や BitSet[3000] として使います。-mavx2の指定は不要です。動的版と静的版の両方で使うAVX2カーネルです。各モジュールにincludeします。

Types

BitSet[size] {.byref.} = object
  bits: array[wordCount(size), uint64]
  Source   Edit

Procs

proc `$`[size](bitset: BitSet[size]): string
添字の大きい順にビットを並べた文字列を返します。   Source   Edit
proc `&=`[size](x: var BitSet[size]; y: BitSet[size])
自身を共通部分に更新します。   Source   Edit
proc `&`[size](x, y: BitSet[size]): BitSet[size] {.noinit.}
共通部分を返します。   Source   Edit
proc `<<`[size](bitset: BitSet[size]; x: int): BitSet[size]
添字が大きい方向へxビットずらし、範囲外を切り捨てます。   Source   Edit
proc `>>`[size](bitset: BitSet[size]; x: int): BitSet[size]
添字が小さい方向へxビットずらし、範囲外を切り捨てます。   Source   Edit
proc `[]=`[size](bitset: var BitSet[size]; idx: Natural; x: bool)
指定した添字のビットを真偽値で更新します。   Source   Edit
proc `[]=`[size](bitset: var BitSet[size]; idx: Natural; x: int)
0ならビットを落とし、1なら立てます。それ以外は何もしません。   Source   Edit
proc `[]`[size](bitset: BitSet[size]; idx: Natural): bool
指定した添字のビットが立っているかを返します。   Source   Edit
proc `^=`[size](x: var BitSet[size]; y: BitSet[size])
自身を対称差に更新します。   Source   Edit
proc `^`[size](x, y: BitSet[size]): BitSet[size] {.noinit.}
対称差を返します。   Source   Edit
proc `|=`[size](x: var BitSet[size]; y: BitSet[size])
自身を和集合に更新します。   Source   Edit
proc `|`[size](x, y: BitSet[size]): BitSet[size] {.noinit.}
和集合を返します。   Source   Edit
proc `~`[size](x: BitSet[size]): BitSet[size] {.noinit.}
集合のビット数を保ったまま各ビットを反転します。   Source   Edit
proc andpopcount[size](x, y: BitSet[size]): int
共通部分の要素数を、一時的な集合を作らずに返します。   Source   Edit
proc initBitSet(size: static int): BitSet[size]
指定したビット数の空集合を構築します。   Source   Edit
proc initBitSet(v: openArray[bool]; size: static int): BitSet[size] {.noinit.}
真偽値配列から集合を構築し、残りを0で埋めます。   Source   Edit
proc initBitSetFromIndexes(indexes: openArray[int]; size: static int): BitSet[
    size]
指定した添字のビットを立てた集合を構築します。   Source   Edit
proc len[size](bitset: BitSet[size]): int {.inline.}
集合のビット数を返します。   Source   Edit
proc lowestBit[size](bitset: BitSet[size]): int
最小の要素を返し、空集合なら-1を返します。   Source   Edit
proc orpopcount[size](x, y: BitSet[size]): int
和集合の要素数を、一時的な集合を作らずに返します。   Source   Edit
proc popcount[size](x: BitSet[size]): int
立っているビットの個数を返します。   Source   Edit
proc xorpopcount[size](x, y: BitSet[size]): int
対称差の要素数を、一時的な集合を作らずに返します。   Source   Edit

Iterators

iterator items[size](bitset: BitSet[size]): int
立っているビットの添字を昇順に列挙します。   Source   Edit