src/cplib/collections/bitset_avx2

  Source   Edit

AVX2で論理演算・シフト・ビット数の集計を高速化した動的ビット集合です。 amd64のAVX2対応CPUとGCC/Clangが必要です。C/C++バックエンドに対応します。 import cplib/collections/bitset_avx2 とし、initBitSetで構築します。

-d:releaseでのコンパイルを推奨します。-mavx2の指定は不要です。
動的版と静的版の両方で使うAVX2カーネルです。各モジュールにincludeします。

Types

BitSetAvx2 {.byref.} = object
  bits: seq[uint64]
  size: int
  Source   Edit

Procs

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

Iterators

iterator items(bitset: BitSetAvx2): int {....raises: [], tags: [].}
立っているビットの添字を昇順に列挙します。   Source   Edit