github.com/hslam/atomic@v1.0.0/int32.go (about)

     1  // Copyright (c) 2020 Meng Huang (mhboy@outlook.com)
     2  // This package is licensed under a MIT license that can be found in the LICENSE file.
     3  
     4  package atomic
     5  
     6  import (
     7  	"sync/atomic"
     8  )
     9  
    10  // Int32 represents an int32.
    11  type Int32 struct {
    12  	v int32
    13  }
    14  
    15  // NewInt32 returns a new Int32.
    16  func NewInt32(val int32) *Int32 {
    17  	addr := &Int32{}
    18  	addr.Store(val)
    19  	return addr
    20  }
    21  
    22  // Swap atomically stores new into *addr and returns the previous *addr value.
    23  func (addr *Int32) Swap(new int32) (old int32) {
    24  	return atomic.SwapInt32(&addr.v, new)
    25  }
    26  
    27  // CompareAndSwap executes the compare-and-swap operation for an int32 value.
    28  func (addr *Int32) CompareAndSwap(old, new int32) (swapped bool) {
    29  	return atomic.CompareAndSwapInt32(&addr.v, old, new)
    30  }
    31  
    32  // Add atomically adds delta to *addr and returns the new value.
    33  func (addr *Int32) Add(delta int32) (new int32) {
    34  	return atomic.AddInt32(&addr.v, delta)
    35  }
    36  
    37  // Load atomically loads *addr.
    38  func (addr *Int32) Load() (val int32) {
    39  	return atomic.LoadInt32(&addr.v)
    40  }
    41  
    42  // Store atomically stores val into *addr.
    43  func (addr *Int32) Store(val int32) {
    44  	atomic.StoreInt32(&addr.v, val)
    45  }