github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/sync/atomic/type.go (about)

     1  // Copyright 2022 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package atomic
     6  
     7  import "github.com/shogo82148/std/unsafe"
     8  
     9  // Boolはアトミックなブーリアン値です。
    10  // ゼロ値はfalseです。
    11  type Bool struct {
    12  	_ noCopy
    13  	v uint32
    14  }
    15  
    16  // Loadはアトミックにxに格納されている値をロードして返します。
    17  func (x *Bool) Load() bool
    18  
    19  // Storeはアトミックにvalをxに格納します。
    20  func (x *Bool) Store(val bool)
    21  
    22  // Swapはアトミックにnewをxに格納し、前の値を返します。
    23  func (x *Bool) Swap(new bool) (old bool)
    24  
    25  // CompareAndSwapは、ブール値xの比較交換操作を実行します。
    26  func (x *Bool) CompareAndSwap(old, new bool) (swapped bool)
    27  
    28  // For testing *Pointer[T]'s methods can be inlined.
    29  // Keep in sync with cmd/compile/internal/test/inl_test.go:TestIntendedInlining.
    30  var _ = &Pointer[int]{}
    31  
    32  // Pointerはタイプ*Tのアトミックポインタです。ゼロ値はnil *Tです。
    33  type Pointer[T any] struct {
    34  	// Mention *T in a field to disallow conversion between Pointer types.
    35  	// See go.dev/issue/56603 for more details.
    36  	// Use *T, not T, to avoid spurious recursive type definition errors.
    37  	_ [0]*T
    38  
    39  	_ noCopy
    40  	v unsafe.Pointer
    41  }
    42  
    43  // Loadはアトミックにxに格納されている値をロードして返します。
    44  func (x *Pointer[T]) Load() *T
    45  
    46  // Storeはアトミックにvalをxに格納します。
    47  func (x *Pointer[T]) Store(val *T)
    48  
    49  // Swapはアトミックにnewをxに格納し、前の値を返します。
    50  func (x *Pointer[T]) Swap(new *T) (old *T)
    51  
    52  // CompareAndSwapは、ポインタxの比較交換操作を実行します。
    53  func (x *Pointer[T]) CompareAndSwap(old, new *T) (swapped bool)
    54  
    55  // Int32はアトミックなint32です。ゼロ値はゼロです。
    56  type Int32 struct {
    57  	_ noCopy
    58  	v int32
    59  }
    60  
    61  // Loadはアトミックにxに格納されている値をロードして返します。
    62  func (x *Int32) Load() int32
    63  
    64  // Storeはアトミックにvalをxに格納します。
    65  func (x *Int32) Store(val int32)
    66  
    67  // Swapはアトミックにnewをxに格納し、前の値を返します。
    68  func (x *Int32) Swap(new int32) (old int32)
    69  
    70  // CompareAndSwapは、xの比較交換操作を実行します。
    71  func (x *Int32) CompareAndSwap(old, new int32) (swapped bool)
    72  
    73  // Addはアトミックにdeltaをxに加え、新しい値を返します。
    74  func (x *Int32) Add(delta int32) (new int32)
    75  
    76  // Int64はアトミックなint64です。ゼロ値はゼロです。
    77  type Int64 struct {
    78  	_ noCopy
    79  	_ align64
    80  	v int64
    81  }
    82  
    83  // Loadはアトミックにxに格納されている値をロードして返します。
    84  func (x *Int64) Load() int64
    85  
    86  // Storeはアトミックにvalをxに格納します。
    87  func (x *Int64) Store(val int64)
    88  
    89  // Swapはアトミックにnewをxに格納し、前の値を返します。
    90  func (x *Int64) Swap(new int64) (old int64)
    91  
    92  // CompareAndSwapは、xの比較交換操作を実行します。
    93  func (x *Int64) CompareAndSwap(old, new int64) (swapped bool)
    94  
    95  // Addはアトミックにdeltaをxに加え、新しい値を返します。
    96  func (x *Int64) Add(delta int64) (new int64)
    97  
    98  // Uint32はアトミックなuint32です。ゼロ値はゼロです。
    99  type Uint32 struct {
   100  	_ noCopy
   101  	v uint32
   102  }
   103  
   104  // Loadはアトミックにxに格納されている値をロードして返します。
   105  func (x *Uint32) Load() uint32
   106  
   107  // Storeはアトミックにvalをxに格納します。
   108  func (x *Uint32) Store(val uint32)
   109  
   110  // Swapはアトミックにnewをxに格納し、前の値を返します。
   111  func (x *Uint32) Swap(new uint32) (old uint32)
   112  
   113  // CompareAndSwapは、xの比較交換操作を実行します。
   114  func (x *Uint32) CompareAndSwap(old, new uint32) (swapped bool)
   115  
   116  // Addはアトミックにdeltaをxに加え、新しい値を返します。
   117  func (x *Uint32) Add(delta uint32) (new uint32)
   118  
   119  // Uint64はアトミックなuint64です。ゼロ値はゼロです。
   120  type Uint64 struct {
   121  	_ noCopy
   122  	_ align64
   123  	v uint64
   124  }
   125  
   126  // Loadはアトミックにxに格納されている値をロードして返します。
   127  func (x *Uint64) Load() uint64
   128  
   129  // Storeはアトミックにvalをxに格納します。
   130  func (x *Uint64) Store(val uint64)
   131  
   132  // Swapはアトミックにnewをxに格納し、前の値を返します。
   133  func (x *Uint64) Swap(new uint64) (old uint64)
   134  
   135  // CompareAndSwapは、xの比較交換操作を実行します。
   136  func (x *Uint64) CompareAndSwap(old, new uint64) (swapped bool)
   137  
   138  // Addはアトミックにdeltaをxに加え、新しい値を返します。
   139  func (x *Uint64) Add(delta uint64) (new uint64)
   140  
   141  // Uintptrはアトミックなuintptrです。ゼロ値はゼロです。
   142  type Uintptr struct {
   143  	_ noCopy
   144  	v uintptr
   145  }
   146  
   147  // Loadはアトミックにxに格納されている値をロードして返します。
   148  func (x *Uintptr) Load() uintptr
   149  
   150  // Storeはアトミックにvalをxに格納します。
   151  func (x *Uintptr) Store(val uintptr)
   152  
   153  // Swapはアトミックにnewをxに格納し、前の値を返します。
   154  func (x *Uintptr) Swap(new uintptr) (old uintptr)
   155  
   156  // CompareAndSwapは、xの比較交換操作を実行します。
   157  func (x *Uintptr) CompareAndSwap(old, new uintptr) (swapped bool)
   158  
   159  // Addはアトミックにdeltaをxに加え、新しい値を返します。
   160  func (x *Uintptr) Add(delta uintptr) (new uintptr)