github.com/MetalBlockchain/metalgo@v1.11.9/utils/math/sync_averager.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package math
     5  
     6  import (
     7  	"sync"
     8  	"time"
     9  )
    10  
    11  type syncAverager struct {
    12  	lock     sync.RWMutex
    13  	averager Averager
    14  }
    15  
    16  func NewSyncAverager(averager Averager) Averager {
    17  	return &syncAverager{
    18  		averager: averager,
    19  	}
    20  }
    21  
    22  func (a *syncAverager) Observe(value float64, currentTime time.Time) {
    23  	a.lock.Lock()
    24  	defer a.lock.Unlock()
    25  
    26  	a.averager.Observe(value, currentTime)
    27  }
    28  
    29  func (a *syncAverager) Read() float64 {
    30  	a.lock.RLock()
    31  	defer a.lock.RUnlock()
    32  
    33  	return a.averager.Read()
    34  }