mirror of
https://github.com/astaxie/beego.git
synced 2024-06-17 05:13:33 +00:00
106 lines
2.4 KiB
Go
106 lines
2.4 KiB
Go
|
// Copyright 2017 The casbin Authors. All Rights Reserved.
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
|
||
|
package util
|
||
|
|
||
|
import (
|
||
|
"sort"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// EscapeAssertion escapes the dots in the assertion, because the expression evaluation doesn't support such variable names.
|
||
|
func EscapeAssertion(s string) string {
|
||
|
s = strings.Replace(s, "r.", "r_", -1)
|
||
|
s = strings.Replace(s, "p.", "p_", -1)
|
||
|
return s
|
||
|
}
|
||
|
|
||
|
// RemoveComments removes the comments starting with # in the text.
|
||
|
func RemoveComments(s string) string {
|
||
|
pos := strings.Index(s, "#")
|
||
|
if pos == -1 {
|
||
|
return s
|
||
|
}
|
||
|
return strings.TrimSpace(s[0:pos])
|
||
|
}
|
||
|
|
||
|
// ArrayEquals determines whether two string arrays are identical.
|
||
|
func ArrayEquals(a []string, b []string) bool {
|
||
|
if len(a) != len(b) {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
for i, v := range a {
|
||
|
if v != b[i] {
|
||
|
return false
|
||
|
}
|
||
|
}
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
// Array2DEquals determines whether two 2-dimensional string arrays are identical.
|
||
|
func Array2DEquals(a [][]string, b [][]string) bool {
|
||
|
if len(a) != len(b) {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
for i, v := range a {
|
||
|
if !ArrayEquals(v, b[i]) {
|
||
|
return false
|
||
|
}
|
||
|
}
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
// ArrayRemoveDuplicates removes any duplicated elements in a string array.
|
||
|
func ArrayRemoveDuplicates(s *[]string) {
|
||
|
found := make(map[string]bool)
|
||
|
j := 0
|
||
|
for i, x := range *s {
|
||
|
if !found[x] {
|
||
|
found[x] = true
|
||
|
(*s)[j] = (*s)[i]
|
||
|
j++
|
||
|
}
|
||
|
}
|
||
|
*s = (*s)[:j]
|
||
|
}
|
||
|
|
||
|
// ArrayToString gets a printable string for a string array.
|
||
|
func ArrayToString(s []string) string {
|
||
|
return strings.Join(s, ", ")
|
||
|
}
|
||
|
|
||
|
// ParamsToString gets a printable string for variable number of parameters.
|
||
|
func ParamsToString(s ...string) string {
|
||
|
return strings.Join(s, ", ")
|
||
|
}
|
||
|
|
||
|
// SetEquals determines whether two string sets are identical.
|
||
|
func SetEquals(a []string, b []string) bool {
|
||
|
if len(a) != len(b) {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
sort.Strings(a)
|
||
|
sort.Strings(b)
|
||
|
|
||
|
for i, v := range a {
|
||
|
if v != b[i] {
|
||
|
return false
|
||
|
}
|
||
|
}
|
||
|
return true
|
||
|
}
|