github.com/aacfactory/rings@v1.1.2/sequence.go (about) 1 package rings 2 3 import "sync/atomic" 4 5 func NewSequence() (seq *Sequence) { 6 seq = &Sequence{ 7 value: 0, 8 padding: [7]uint32{0, 1, 2, 3, 4, 5, 6}, 9 } 10 return 11 } 12 13 type Sequence struct { 14 value uint32 15 padding [7]uint32 16 } 17 18 func (seq *Sequence) Next() (n uint32) { 19 n = atomic.AddUint32(&seq.value, 1) - 1 20 return 21 } 22 23 func (seq *Sequence) Value() (n uint32) { 24 n = atomic.LoadUint32(&seq.value) - 1 25 return 26 }