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  }