AVX2で論理演算・シフト・ビット数の集計を高速化した動的ビット集合です。 amd64のAVX2対応CPUとGCC/Clangが必要です。C/C++バックエンドに対応します。 import cplib/collections/bitset_avx2 とし、initBitSetで構築します。
-d:releaseでのコンパイルを推奨します。-mavx2の指定は不要です。
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