mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
Short-cut common memChunk operations
memChunk is a linked list, speed up some common operations when there's no need to iterate all elements on the list. Signed-off-by: Łukasz Mierzwa <l.mierzwa@gmail.com>
This commit is contained in:
parent
f131cdd4c5
commit
b6e22cd346
11
tsdb/head.go
11
tsdb/head.go
|
@ -2265,6 +2265,10 @@ type memChunk struct {
|
|||
|
||||
// len returns the length of memChunk list, including the element it was called on.
|
||||
func (mc *memChunk) len() (count int) {
|
||||
if mc.prev == nil {
|
||||
return 1
|
||||
}
|
||||
|
||||
elem := mc
|
||||
for elem != nil {
|
||||
count++
|
||||
|
@ -2276,6 +2280,9 @@ func (mc *memChunk) len() (count int) {
|
|||
// oldest returns the oldest element on the list.
|
||||
// For single element list this will be the same memChunk oldest() was called on.
|
||||
func (mc *memChunk) oldest() (elem *memChunk) {
|
||||
if mc.prev == nil {
|
||||
return mc
|
||||
}
|
||||
elem = mc
|
||||
for elem.prev != nil {
|
||||
elem = elem.prev
|
||||
|
@ -2288,6 +2295,9 @@ func (mc *memChunk) atOffset(offset int) (elem *memChunk) {
|
|||
if offset == 0 {
|
||||
return mc
|
||||
}
|
||||
if offset == 1 {
|
||||
return mc.prev
|
||||
}
|
||||
if offset < 0 {
|
||||
return nil
|
||||
}
|
||||
|
@ -2301,7 +2311,6 @@ func (mc *memChunk) atOffset(offset int) (elem *memChunk) {
|
|||
break
|
||||
}
|
||||
}
|
||||
|
||||
return elem
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue