|
|
|
@ -13,20 +13,6 @@ package utils
|
|
|
|
|
// positive , if a > b
|
|
|
|
|
type Comparator func(a, b interface{}) int
|
|
|
|
|
|
|
|
|
|
// IntComparator provides a basic comparison on ints
|
|
|
|
|
func IntComparator(a, b interface{}) int {
|
|
|
|
|
aInt := a.(int)
|
|
|
|
|
bInt := b.(int)
|
|
|
|
|
switch {
|
|
|
|
|
case aInt > bInt:
|
|
|
|
|
return 1
|
|
|
|
|
case aInt < bInt:
|
|
|
|
|
return -1
|
|
|
|
|
default:
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// StringComparator provides a fast comparison on strings
|
|
|
|
|
func StringComparator(a, b interface{}) int {
|
|
|
|
|
s1 := a.(string)
|
|
|
|
@ -50,3 +36,199 @@ func StringComparator(a, b interface{}) int {
|
|
|
|
|
}
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// IntComparator provides a basic comparison on int
|
|
|
|
|
func IntComparator(a, b interface{}) int {
|
|
|
|
|
aAsserted := a.(int)
|
|
|
|
|
bAsserted := b.(int)
|
|
|
|
|
switch {
|
|
|
|
|
case aAsserted > bAsserted:
|
|
|
|
|
return 1
|
|
|
|
|
case aAsserted < bAsserted:
|
|
|
|
|
return -1
|
|
|
|
|
default:
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Int8Comparator provides a basic comparison on int8
|
|
|
|
|
func Int8Comparator(a, b interface{}) int {
|
|
|
|
|
aAsserted := a.(int8)
|
|
|
|
|
bAsserted := b.(int8)
|
|
|
|
|
switch {
|
|
|
|
|
case aAsserted > bAsserted:
|
|
|
|
|
return 1
|
|
|
|
|
case aAsserted < bAsserted:
|
|
|
|
|
return -1
|
|
|
|
|
default:
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Int16Comparator provides a basic comparison on int16
|
|
|
|
|
func Int16Comparator(a, b interface{}) int {
|
|
|
|
|
aAsserted := a.(int16)
|
|
|
|
|
bAsserted := b.(int16)
|
|
|
|
|
switch {
|
|
|
|
|
case aAsserted > bAsserted:
|
|
|
|
|
return 1
|
|
|
|
|
case aAsserted < bAsserted:
|
|
|
|
|
return -1
|
|
|
|
|
default:
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Int32Comparator provides a basic comparison on int32
|
|
|
|
|
func Int32Comparator(a, b interface{}) int {
|
|
|
|
|
aAsserted := a.(int32)
|
|
|
|
|
bAsserted := b.(int32)
|
|
|
|
|
switch {
|
|
|
|
|
case aAsserted > bAsserted:
|
|
|
|
|
return 1
|
|
|
|
|
case aAsserted < bAsserted:
|
|
|
|
|
return -1
|
|
|
|
|
default:
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Int64Comparator provides a basic comparison on int64
|
|
|
|
|
func Int64Comparator(a, b interface{}) int {
|
|
|
|
|
aAsserted := a.(int64)
|
|
|
|
|
bAsserted := b.(int64)
|
|
|
|
|
switch {
|
|
|
|
|
case aAsserted > bAsserted:
|
|
|
|
|
return 1
|
|
|
|
|
case aAsserted < bAsserted:
|
|
|
|
|
return -1
|
|
|
|
|
default:
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// UIntComparator provides a basic comparison on uint
|
|
|
|
|
func UIntComparator(a, b interface{}) int {
|
|
|
|
|
aAsserted := a.(uint)
|
|
|
|
|
bAsserted := b.(uint)
|
|
|
|
|
switch {
|
|
|
|
|
case aAsserted > bAsserted:
|
|
|
|
|
return 1
|
|
|
|
|
case aAsserted < bAsserted:
|
|
|
|
|
return -1
|
|
|
|
|
default:
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// UInt8Comparator provides a basic comparison on uint8
|
|
|
|
|
func UInt8Comparator(a, b interface{}) int {
|
|
|
|
|
aAsserted := a.(uint8)
|
|
|
|
|
bAsserted := b.(uint8)
|
|
|
|
|
switch {
|
|
|
|
|
case aAsserted > bAsserted:
|
|
|
|
|
return 1
|
|
|
|
|
case aAsserted < bAsserted:
|
|
|
|
|
return -1
|
|
|
|
|
default:
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// UInt16Comparator provides a basic comparison on uint16
|
|
|
|
|
func UInt16Comparator(a, b interface{}) int {
|
|
|
|
|
aAsserted := a.(uint16)
|
|
|
|
|
bAsserted := b.(uint16)
|
|
|
|
|
switch {
|
|
|
|
|
case aAsserted > bAsserted:
|
|
|
|
|
return 1
|
|
|
|
|
case aAsserted < bAsserted:
|
|
|
|
|
return -1
|
|
|
|
|
default:
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// UInt32Comparator provides a basic comparison on uint32
|
|
|
|
|
func UInt32Comparator(a, b interface{}) int {
|
|
|
|
|
aAsserted := a.(uint32)
|
|
|
|
|
bAsserted := b.(uint32)
|
|
|
|
|
switch {
|
|
|
|
|
case aAsserted > bAsserted:
|
|
|
|
|
return 1
|
|
|
|
|
case aAsserted < bAsserted:
|
|
|
|
|
return -1
|
|
|
|
|
default:
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// UInt64Comparator provides a basic comparison on uint64
|
|
|
|
|
func UInt64Comparator(a, b interface{}) int {
|
|
|
|
|
aAsserted := a.(uint64)
|
|
|
|
|
bAsserted := b.(uint64)
|
|
|
|
|
switch {
|
|
|
|
|
case aAsserted > bAsserted:
|
|
|
|
|
return 1
|
|
|
|
|
case aAsserted < bAsserted:
|
|
|
|
|
return -1
|
|
|
|
|
default:
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Float32Comparator provides a basic comparison on float32
|
|
|
|
|
func Float32Comparator(a, b interface{}) int {
|
|
|
|
|
aAsserted := a.(float32)
|
|
|
|
|
bAsserted := b.(float32)
|
|
|
|
|
switch {
|
|
|
|
|
case aAsserted > bAsserted:
|
|
|
|
|
return 1
|
|
|
|
|
case aAsserted < bAsserted:
|
|
|
|
|
return -1
|
|
|
|
|
default:
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Float64Comparator provides a basic comparison on float64
|
|
|
|
|
func Float64Comparator(a, b interface{}) int {
|
|
|
|
|
aAsserted := a.(float64)
|
|
|
|
|
bAsserted := b.(float64)
|
|
|
|
|
switch {
|
|
|
|
|
case aAsserted > bAsserted:
|
|
|
|
|
return 1
|
|
|
|
|
case aAsserted < bAsserted:
|
|
|
|
|
return -1
|
|
|
|
|
default:
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ByteComparator provides a basic comparison on byte
|
|
|
|
|
func ByteComparator(a, b interface{}) int {
|
|
|
|
|
aAsserted := a.(byte)
|
|
|
|
|
bAsserted := b.(byte)
|
|
|
|
|
switch {
|
|
|
|
|
case aAsserted > bAsserted:
|
|
|
|
|
return 1
|
|
|
|
|
case aAsserted < bAsserted:
|
|
|
|
|
return -1
|
|
|
|
|
default:
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// RuneComparator provides a basic comparison on rune
|
|
|
|
|
func RuneComparator(a, b interface{}) int {
|
|
|
|
|
aAsserted := a.(rune)
|
|
|
|
|
bAsserted := b.(rune)
|
|
|
|
|
switch {
|
|
|
|
|
case aAsserted > bAsserted:
|
|
|
|
|
return 1
|
|
|
|
|
case aAsserted < bAsserted:
|
|
|
|
|
return -1
|
|
|
|
|
default:
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|