From e0d5306ba5edf72e7123f0ffc49deb26083d8828 Mon Sep 17 00:00:00 2001 From: Sydonian <794346190@qq.com> Date: Mon, 15 Jan 2024 16:32:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0Bitmap=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkgs/bitmap/bitmap.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 pkgs/bitmap/bitmap.go diff --git a/pkgs/bitmap/bitmap.go b/pkgs/bitmap/bitmap.go new file mode 100644 index 0000000..b1c3e63 --- /dev/null +++ b/pkgs/bitmap/bitmap.go @@ -0,0 +1,29 @@ +package bitmap + +type Bitmap64 uint64 + +func (b *Bitmap64) Set(index int, val bool) { + if val { + *b |= 1 << index + } else { + *b &= ^(1 << index) + } +} + +func (b *Bitmap64) Get(index int) bool { + return (*b & (1 << index)) > 0 +} + +func (b *Bitmap64) Or(other *Bitmap64) { + *b |= *other +} + +func (b *Bitmap64) Weight() int { + v := *b + cnt := 0 + for v > 0 { + cnt++ + v &= (v - 1) + } + return cnt +}