2017-09-14 16:16:22 +08:00
// Copyright 2017 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package util
2020-12-25 09:59:32 +00:00
import (
"sort"
"strings"
)
2017-09-14 16:16:22 +08:00
// Int64Slice attaches the methods of Interface to []int64, sorting in increasing order.
type Int64Slice [ ] int64
func ( p Int64Slice ) Len ( ) int { return len ( p ) }
func ( p Int64Slice ) Less ( i , j int ) bool { return p [ i ] < p [ j ] }
func ( p Int64Slice ) Swap ( i , j int ) { p [ i ] , p [ j ] = p [ j ] , p [ i ] }
// IsSliceInt64Eq returns if the two slice has the same elements but different sequences.
func IsSliceInt64Eq ( a , b [ ] int64 ) bool {
if len ( a ) != len ( b ) {
return false
}
sort . Sort ( Int64Slice ( a ) )
sort . Sort ( Int64Slice ( b ) )
for i := 0 ; i < len ( a ) ; i ++ {
if a [ i ] != b [ i ] {
return false
}
}
return true
}
2018-05-24 06:59:02 +02:00
// ExistsInSlice returns true if string exists in slice.
func ExistsInSlice ( target string , slice [ ] string ) bool {
i := sort . Search ( len ( slice ) ,
func ( i int ) bool { return slice [ i ] == target } )
return i < len ( slice )
}
2019-10-15 20:19:32 +08:00
// IsStringInSlice sequential searches if string exists in slice.
2020-12-25 09:59:32 +00:00
func IsStringInSlice ( target string , slice [ ] string , insensitive ... bool ) bool {
caseInsensitive := false
if len ( insensitive ) != 0 && insensitive [ 0 ] {
caseInsensitive = true
target = strings . ToLower ( target )
}
2019-10-15 20:19:32 +08:00
for i := 0 ; i < len ( slice ) ; i ++ {
2020-12-25 09:59:32 +00:00
if caseInsensitive {
if strings . ToLower ( slice [ i ] ) == target {
return true
}
} else {
if slice [ i ] == target {
return true
}
2019-10-15 20:19:32 +08:00
}
}
return false
}
2020-02-28 09:16:41 +01:00
// IsInt64InSlice sequential searches if int64 exists in slice.
func IsInt64InSlice ( target int64 , slice [ ] int64 ) bool {
for i := 0 ; i < len ( slice ) ; i ++ {
if slice [ i ] == target {
return true
}
}
return false
}
2018-05-24 06:59:02 +02:00
// IsEqualSlice returns true if slices are equal.
func IsEqualSlice ( target [ ] string , source [ ] string ) bool {
if len ( target ) != len ( source ) {
return false
}
if ( target == nil ) != ( source == nil ) {
return false
}
sort . Strings ( target )
sort . Strings ( source )
for i , v := range target {
if v != source [ i ] {
return false
}
}
return true
}