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)