github.com/KarpelesLab/weak@v0.1.1/state.go (about)

     1  package weak
     2  
     3  import "sync/atomic"
     4  
     5  type refState uint32
     6  
     7  const (
     8  	refDEAD  refState = 0
     9  	refALIVE refState = 1
    10  	refINUSE refState = 2
    11  )
    12  
    13  func (wrS *refState) CaS(old, new refState) bool {
    14  	return atomic.CompareAndSwapUint32((*uint32)(wrS), uint32(old), uint32(new))
    15  }
    16  
    17  func (wrS *refState) Set(v refState) {
    18  	atomic.StoreUint32((*uint32)(wrS), uint32(v))
    19  }
    20  
    21  func (wrS *refState) Get() refState {
    22  	return refState(atomic.LoadUint32((*uint32)(wrS)))
    23  }