$76 GRAYBYTE WORDPRESS FILE MANAGER $62

SERVER : vnpttt-amd7f72-h1.vietnix.vn #1 SMP Fri May 24 12:42:50 UTC 2024
SERVER IP : 103.200.23.149 | ADMIN IP 216.73.216.22
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/usr/lib/golang/src/reflect/

HOME
Current File : /usr/lib/golang/src/reflect//swapper.go
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package reflect

import (
	"internal/abi"
	"internal/goarch"
	"internal/unsafeheader"
	"unsafe"
)

// Swapper returns a function that swaps the elements in the provided
// slice.
//
// Swapper panics if the provided interface is not a slice.
func Swapper(slice any) func(i, j int) {
	v := ValueOf(slice)
	if v.Kind() != Slice {
		panic(&ValueError{Method: "Swapper", Kind: v.Kind()})
	}
	// Fast path for slices of size 0 and 1. Nothing to swap.
	switch v.Len() {
	case 0:
		return func(i, j int) { panic("reflect: slice index out of range") }
	case 1:
		return func(i, j int) {
			if i != 0 || j != 0 {
				panic("reflect: slice index out of range")
			}
		}
	}

	typ := v.Type().Elem().common()
	size := typ.Size()
	hasPtr := typ.Pointers()

	// Some common & small cases, without using memmove:
	if hasPtr {
		if size == goarch.PtrSize {
			ps := *(*[]unsafe.Pointer)(v.ptr)
			return func(i, j int) { ps[i], ps[j] = ps[j], ps[i] }
		}
		if typ.Kind() == abi.String {
			ss := *(*[]string)(v.ptr)
			return func(i, j int) { ss[i], ss[j] = ss[j], ss[i] }
		}
	} else {
		switch size {
		case 8:
			is := *(*[]int64)(v.ptr)
			return func(i, j int) { is[i], is[j] = is[j], is[i] }
		case 4:
			is := *(*[]int32)(v.ptr)
			return func(i, j int) { is[i], is[j] = is[j], is[i] }
		case 2:
			is := *(*[]int16)(v.ptr)
			return func(i, j int) { is[i], is[j] = is[j], is[i] }
		case 1:
			is := *(*[]int8)(v.ptr)
			return func(i, j int) { is[i], is[j] = is[j], is[i] }
		}
	}

	s := (*unsafeheader.Slice)(v.ptr)
	tmp := unsafe_New(typ) // swap scratch space

	return func(i, j int) {
		if uint(i) >= uint(s.Len) || uint(j) >= uint(s.Len) {
			panic("reflect: slice index out of range")
		}
		val1 := arrayAt(s.Data, i, size, "i < s.Len")
		val2 := arrayAt(s.Data, j, size, "j < s.Len")
		typedmemmove(typ, tmp, val1)
		typedmemmove(typ, val1, val2)
		typedmemmove(typ, val2, tmp)
	}
}

Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
16 Dec 2025 9.30 PM
root / root
0755
internal
--
4 Dec 2025 6.06 PM
root / root
0755
abi.go
15.021 KB
4 Dec 2025 6.06 PM
root / root
0644
arena.go
0.561 KB
4 Dec 2025 6.06 PM
root / root
0644
asm_386.s
1.073 KB
4 Dec 2025 6.06 PM
root / root
0644
asm_amd64.s
2.764 KB
4 Dec 2025 6.06 PM
root / root
0644
asm_arm.s
1.129 KB
4 Dec 2025 6.06 PM
root / root
0644
asm_arm64.s
2.767 KB
4 Dec 2025 6.06 PM
root / root
0644
asm_loong64.s
2.708 KB
4 Dec 2025 6.06 PM
root / root
0644
asm_mips64x.s
1.163 KB
4 Dec 2025 6.06 PM
root / root
0644
asm_mipsx.s
1.155 KB
4 Dec 2025 6.06 PM
root / root
0644
asm_ppc64x.s
3.314 KB
4 Dec 2025 6.06 PM
root / root
0644
asm_riscv64.s
2.581 KB
4 Dec 2025 6.06 PM
root / root
0644
asm_s390x.s
1.101 KB
4 Dec 2025 6.06 PM
root / root
0644
asm_wasm.s
1.147 KB
4 Dec 2025 6.06 PM
root / root
0644
badlinkname.go
4.51 KB
4 Dec 2025 6.06 PM
root / root
0644
deepequal.go
7.42 KB
4 Dec 2025 6.06 PM
root / root
0644
float32reg_generic.go
0.665 KB
4 Dec 2025 6.06 PM
root / root
0644
float32reg_ppc64x.s
0.818 KB
4 Dec 2025 6.06 PM
root / root
0644
float32reg_riscv64.s
0.775 KB
4 Dec 2025 6.06 PM
root / root
0644
iter.go
4.24 KB
4 Dec 2025 6.06 PM
root / root
0644
makefunc.go
5.912 KB
4 Dec 2025 6.06 PM
root / root
0644
map_noswiss.go
13.461 KB
4 Dec 2025 6.06 PM
root / root
0644
map_swiss.go
12.515 KB
4 Dec 2025 6.06 PM
root / root
0644
stubs_ppc64x.go
0.285 KB
4 Dec 2025 6.06 PM
root / root
0644
stubs_riscv64.go
0.257 KB
4 Dec 2025 6.06 PM
root / root
0644
swapper.go
1.994 KB
4 Dec 2025 6.06 PM
root / root
0644
type.go
79.763 KB
4 Dec 2025 6.06 PM
root / root
0644
value.go
113.486 KB
4 Dec 2025 6.06 PM
root / root
0644
visiblefields.go
2.966 KB
4 Dec 2025 6.06 PM
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF