package schedule

import (
	"sort"
)

/** 用于定义各类排序 **/

//通用结构体排序，必须重写数组Len() Swap() Less()函数
type body_wrapper struct {
	Bodys [] interface{}
	by func(p,q*interface{}) bool //内部Less()函数会用到
}
type SortBodyBy func(p, q* interface{}) bool //定义一个函数类型

//数组长度Len()
func (acw body_wrapper) Len() int  {
	return len(acw.Bodys)
}
//元素交换
func (acw body_wrapper) Swap(i,j int){
	acw.Bodys[i],acw.Bodys[j] = acw.Bodys[j],acw.Bodys[i]
}
//比较函数，使用外部传入的by比较函数
func (acw body_wrapper) Less(i,j int) bool {
	return acw.by(&acw.Bodys[i],&acw.Bodys[j])
}
//自定义排序字段，参考SortBodyByCreateTime中的传入函数
func SortBody(bodys [] interface{}, by SortBodyBy){
	sort.Sort(body_wrapper{bodys,by})
}
