/** buffer for double */ type DoubleBuffer struct { index int32 buffer []float64 isFull bool } func NewDoubleBuffer(size int32) *DoubleBuffer { return &DoubleBuffer{ buffer:make([]float64, size), } } func (b *DoubleBuffer) Reset() { b.index = 0 b.isFull = false } func (b *DoubleBuffer) IsFull() bool { return b.isFull } func (b *DoubleBuffer) GetAverage() float64 { entriesNum := 0 if b.isFull { entriesNum = len(b.buffer) } else { entriesNum = int(b.index) } if entriesNum == 0 { return 0 } sum := 0.0 for i := 0; i < entriesNum; i++ { sum += b.buffer[i] } return sum / float64(entriesNum) } func (b *DoubleBuffer) Put(v float64) { if int32(len(b.buffer)) == b.index { b.index = 0 } b.buffer[b.index] = v b.index++ if b.index == int32(len(b.buffer)) { b.isFull = true } }