github.com/hslam/atomic@v1.0.0/int64.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  // Int64 represents an int64.
    11  type Int64 struct {
    12  	v int64
    13  }
    14  
    15  // NewInt64 returns a new Int64.
    16  func NewInt64(val int64) *Int64 {
    17  	addr := &Int64{}
    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 *Int64) Swap(new int64) (old int64) {
    24  	return atomic.SwapInt64(&addr.v, new)
    25  }
    26  
    27  // CompareAndSwap executes the compare-and-swap operation for an int32 value.
    28  func (addr *Int64) CompareAndSwap(old, new int64) (swapped bool) {
    29  	return atomic.CompareAndSwapInt64(&addr.v, old, new)
    30  }
    31  
    32  // Add atomically adds delta to *addr and returns the new value.
    33  func (addr *Int64) Add(delta int64) (new int64) {
    34  	return atomic.AddInt64(&addr.v, delta)
    35  }
    36  
    37  // Load atomically loads *addr.
    38  func (addr *Int64) Load() (val int64) {
    39  	return atomic.LoadInt64(&addr.v)
    40  }
    41  
    42  // Store atomically stores val into *addr.
    43  func (addr *Int64) Store(val int64) {
    44  	atomic.StoreInt64(&addr.v, val)
    45  }