Initial QSfera import
This commit is contained in:
+69
@@ -0,0 +1,69 @@
|
||||
package maputil
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sort"
|
||||
)
|
||||
|
||||
// Aliases implemented a simple string alias map.
|
||||
// - key: alias, value: real name
|
||||
type Aliases map[string]string
|
||||
|
||||
// AddAlias to the Aliases map
|
||||
func (as Aliases) AddAlias(alias, real string) {
|
||||
if rn, ok := as[alias]; ok {
|
||||
panic(fmt.Sprintf("The alias '%s' is already used by '%s'", alias, rn))
|
||||
}
|
||||
as[alias] = real
|
||||
}
|
||||
|
||||
// AddAliases to the Aliases map
|
||||
func (as Aliases) AddAliases(real string, aliases []string) {
|
||||
for _, a := range aliases {
|
||||
as.AddAlias(a, real)
|
||||
}
|
||||
}
|
||||
|
||||
// AddAliasMap to the Aliases map
|
||||
func (as Aliases) AddAliasMap(alias2real map[string]string) {
|
||||
for a, r := range alias2real {
|
||||
as.AddAlias(a, r)
|
||||
}
|
||||
}
|
||||
|
||||
// HasAlias in the Aliases map
|
||||
func (as Aliases) HasAlias(alias string) bool {
|
||||
if _, ok := as[alias]; ok {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// ResolveAlias by given name.
|
||||
func (as Aliases) ResolveAlias(alias string) string {
|
||||
if name, ok := as[alias]; ok {
|
||||
return name
|
||||
}
|
||||
return alias
|
||||
}
|
||||
|
||||
// AliasesNames returns all sorted alias names.
|
||||
func (as Aliases) AliasesNames() []string {
|
||||
ns := make([]string, 0, len(as))
|
||||
for alias := range as {
|
||||
ns = append(ns, alias)
|
||||
}
|
||||
sort.Strings(ns)
|
||||
return ns
|
||||
}
|
||||
|
||||
// GroupAliases groups aliases by real name.
|
||||
//
|
||||
// returns: {real name -> []aliases, ...}
|
||||
func (as Aliases) GroupAliases() map[string][]string {
|
||||
gaMap := make(map[string][]string)
|
||||
for alias, name := range as {
|
||||
gaMap[name] = append(gaMap[name], alias)
|
||||
}
|
||||
return gaMap
|
||||
}
|
||||
Reference in New Issue
Block a user