github.com/lirm/aeron-go@v0.0.0-20230415210743-920325491dc4/aeron/counters/atomic_counter.go (about)

     1  package counters
     2  
     3  import "fmt"
     4  
     5  type AtomicCounter struct {
     6  	Reader         *Reader
     7  	CounterId      int32
     8  	metaDataOffset int32
     9  	valueOffset    int32
    10  }
    11  
    12  func NewAtomicCounter(reader *Reader, counterId int32) (*AtomicCounter, error) {
    13  	if counterId < 0 || counterId >= int32(reader.maxCounterID) {
    14  		return nil, fmt.Errorf("counterId=%d maxCounterId=%d", counterId, reader.maxCounterID)
    15  	}
    16  	metaDataOffset := counterId * MetadataLength
    17  	valueOffset := counterId * CounterLength
    18  	return &AtomicCounter{reader, counterId, metaDataOffset, valueOffset}, nil
    19  }
    20  
    21  func (ac *AtomicCounter) State() int32 {
    22  	return ac.Reader.metaData.GetInt32Volatile(ac.metaDataOffset)
    23  }
    24  
    25  func (ac *AtomicCounter) Label() string {
    26  	return ac.Reader.labelValue(ac.metaDataOffset)
    27  }
    28  
    29  func (ac *AtomicCounter) Get() int64 {
    30  	return ac.Reader.values.GetInt64Volatile(ac.valueOffset)
    31  }
    32  
    33  func (ac *AtomicCounter) GetWeak() int64 {
    34  	return ac.Reader.values.GetInt64(ac.valueOffset)
    35  }
    36  
    37  func (ac *AtomicCounter) Set(value int64) {
    38  	ac.Reader.values.PutInt64Ordered(ac.valueOffset, value)
    39  }
    40  
    41  func (ac *AtomicCounter) SetWeak(value int64) {
    42  	ac.Reader.values.PutInt64(ac.valueOffset, value)
    43  }