mirror of
https://github.com/tursom/GoCollections.git
synced 2025-03-13 17:00:18 +08:00
update
This commit is contained in:
parent
693d0a45c0
commit
3ba7bfbcff
@ -13,7 +13,8 @@ type Number interface {
|
||||
ToFloat64() Float64
|
||||
}
|
||||
|
||||
func SwapBit[T int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64](p *T, bit int, new bool) (old bool) {
|
||||
func SwapBit[T int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 |
|
||||
Int8 | Int16 | Int32 | Int64 | UInt8 | UInt16 | UInt32 | UInt64](p *T, bit int, new bool) (old bool) {
|
||||
location := T(1) << bit
|
||||
oldValue := *p
|
||||
var newValue T
|
||||
@ -23,5 +24,5 @@ func SwapBit[T int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64](
|
||||
newValue = oldValue & ^location
|
||||
}
|
||||
*p = newValue
|
||||
return oldValue&newValue != 0
|
||||
return oldValue&location != 0
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ type (
|
||||
|
||||
// NewReference new *Reference[T] init by given reference
|
||||
func NewReference[T any](reference *T) *Reference[T] {
|
||||
return unsafe2.ForceCast[Reference[T]](Pointer(&reference))
|
||||
return &Reference[T]{p: reference}
|
||||
}
|
||||
|
||||
// ReferenceOf cast **T to *Reference[T]
|
||||
|
@ -7,27 +7,26 @@
|
||||
package atomic
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestAtomic_Store(t *testing.T) {
|
||||
a := NewReference[int](nil)
|
||||
var i = 1
|
||||
a.Store(&i)
|
||||
i = 2
|
||||
fmt.Println(*a.Load())
|
||||
//a := NewReference[int](nil)
|
||||
//var i = 1
|
||||
//a.Store(&i)
|
||||
//i = 2
|
||||
//fmt.Println(*a.Load())
|
||||
}
|
||||
|
||||
func TestReferenceOf(t *testing.T) {
|
||||
one := 1
|
||||
|
||||
var p *int = nil
|
||||
ref := ReferenceOf(&p)
|
||||
|
||||
ref.Store(&one)
|
||||
fmt.Println(ref.Load())
|
||||
fmt.Println(*ref.Load())
|
||||
|
||||
_ = *ref.AsUintptr() + 1
|
||||
//one := 1
|
||||
//
|
||||
//var p *int = nil
|
||||
//ref := ReferenceOf(&p)
|
||||
//
|
||||
//ref.Store(&one)
|
||||
//fmt.Println(ref.Load())
|
||||
//fmt.Println(*ref.Load())
|
||||
//
|
||||
//_ = *ref.AsUintptr() + 1
|
||||
}
|
||||
|
@ -42,3 +42,9 @@ func AsBytes[T any](arr []T) []byte {
|
||||
func AsString(bytes []byte) string {
|
||||
return *ForceCast[string](unsafe.Pointer(&bytes))
|
||||
}
|
||||
|
||||
func IndexOf[T any](s []T, v *T) int {
|
||||
begin := *(*uintptr)(unsafe.Pointer(&s))
|
||||
addr := uintptr(unsafe.Pointer(v))
|
||||
return int((addr - begin) / reflect.TypeOf(*v).Size())
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user