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 }