Skip to content

Instantly share code, notes, and snippets.

@kuloud
Created November 1, 2016 05:59
Show Gist options
  • Select an option

  • Save kuloud/a3c4ab71e89df9b0725fa2ed97ad6f54 to your computer and use it in GitHub Desktop.

Select an option

Save kuloud/a3c4ab71e89df9b0725fa2ed97ad6f54 to your computer and use it in GitHub Desktop.

Revisions

  1. kuloud created this gist Nov 1, 2016.
    54 changes: 54 additions & 0 deletions double_buffer.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,54 @@

    /**
    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
    }
    }