Skip to content

Commit

Permalink
init
Browse files Browse the repository at this point in the history
  • Loading branch information
sgreben committed Aug 29, 2024
1 parent 5f72e68 commit 60abd3b
Showing 1 changed file with 64 additions and 0 deletions.
64 changes: 64 additions & 0 deletions bucket.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package topk

import (
"unsafe"
)

const (
sizeOfBucketStruct = int(unsafe.Sizeof(Bucket{}))
)

type Bucket struct {
Fingerprint uint32

// Counts is a circular buffer (with its first entry at .First)
Counts []uint32
First uint32
// CountsSum is the current sum of Counts
CountsSum uint32
}

func (me *Bucket) last() uint32 {
n := uint32(len(me.Counts))
return ((me.First + n) - 1) % n
}

func (me *Bucket) tick() {
if me.CountsSum == 0 {
return
}

last := me.First
if last == 0 {
last = uint32(len(me.Counts) - 1)
} else {
last = uint32(last - 1)
}
me.CountsSum -= me.Counts[last]
me.Counts[last] = 0
me.First = last
}

func (me *Bucket) findNonzeroMinimumCount() int {
countsMinIdx := uint32(0)
first := true
var countsMin uint32
i := me.First
for range len(me.Counts) {
if i == uint32(len(me.Counts)) {
i = 0
}
c := me.Counts[i]
if c == 0 {
i++
continue
}
if first || c < countsMin {
countsMin = c
countsMinIdx = i
first = false
}
i++
}
return int(countsMinIdx)
}

0 comments on commit 60abd3b

Please sign in to comment.