// Copyright 2017 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. // +build !go1.8 package obj import ( "reflect" "sort" ) func SortSlice(slice interface{}, less func(i, j int) bool) { val := reflect.ValueOf(slice) tmp := reflect.New(val.Type().Elem()).Elem() x := sliceByFn{val: val, tmp: tmp, less: less} sort.Sort(x) } type sliceByFn struct { val reflect.Value tmp reflect.Value less func(i, j int) bool } func (x sliceByFn) Len() int { return x.val.Len() } func (x sliceByFn) Less(i, j int) bool { return x.less(i, j) } func (x sliceByFn) Swap(i, j int) { a, b := x.val.Index(i), x.val.Index(j) x.tmp.Set(a) a.Set(b) b.Set(x.tmp) }