22 lignes
686 o
Go
22 lignes
686 o
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 reflectutil
|
||
|
|
||
|
import "reflect"
|
||
|
|
||
|
// Swapper returns a function which swaps the elements in slice.
|
||
|
// Swapper panics if the provided interface is not a slice.
|
||
|
//
|
||
|
// Its goal is to work safely and efficiently for all versions and
|
||
|
// variants of Go: pre-Go1.5, Go1.5+, safe, unsafe, App Engine,
|
||
|
// GopherJS, etc.
|
||
|
func Swapper(slice interface{}) func(i, j int) {
|
||
|
v := reflect.ValueOf(slice)
|
||
|
if v.Kind() != reflect.Slice {
|
||
|
panic(&reflect.ValueError{Method: "reflectutil.Swapper", Kind: v.Kind()})
|
||
|
}
|
||
|
return swapper(v)
|
||
|
}
|