...
Run Format

Source file src/cmd/internal/obj/bootstrap.go

Documentation: cmd/internal/obj

  // 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)
  }
  

View as plain text