|
|
|
@ -663,6 +663,11 @@ func (b *BufferedSeriesIterator) PeekBack() (t int64, v float64, ok bool) {
|
|
|
|
|
return b.buf.last()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Buffer returns an iterator over the buffered data.
|
|
|
|
|
func (b *BufferedSeriesIterator) Buffer() SeriesIterator {
|
|
|
|
|
return b.buf.iterator()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Seek advances the iterator to the element at time t or greater.
|
|
|
|
|
func (b *BufferedSeriesIterator) Seek(t int64) bool {
|
|
|
|
|
t0 := t - b.buf.delta
|
|
|
|
@ -741,6 +746,38 @@ func (r *sampleRing) reset() {
|
|
|
|
|
r.f = 0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (r *sampleRing) iterator() SeriesIterator {
|
|
|
|
|
return &sampleRingIterator{r: r, i: -1}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type sampleRingIterator struct {
|
|
|
|
|
r *sampleRing
|
|
|
|
|
i int
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (it *sampleRingIterator) Next() bool {
|
|
|
|
|
it.i++
|
|
|
|
|
return it.i < it.r.l
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (it *sampleRingIterator) Seek(int64) bool {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (it *sampleRingIterator) Err() error {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (it *sampleRingIterator) Values() (int64, float64) {
|
|
|
|
|
return it.r.at(it.i)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (r *sampleRing) at(i int) (int64, float64) {
|
|
|
|
|
j := (r.f + i) % len(r.buf)
|
|
|
|
|
s := r.buf[j]
|
|
|
|
|
return s.t, s.v
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// add adds a sample to the ring buffer and frees all samples that fall
|
|
|
|
|
// out of the delta range.
|
|
|
|
|
func (r *sampleRing) add(t int64, v float64) {
|
|
|
|
|