81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
package gime
|
|
|
|
import "fmt"
|
|
|
|
// TagCollection is a collection of strings for gomobile bindings
|
|
type TagCollection struct {
|
|
list []string
|
|
}
|
|
|
|
// Length returns the number of tags in the collection
|
|
func (tc *TagCollection) Length() int {
|
|
return len(tc.list)
|
|
}
|
|
|
|
// Get returns the string at idx or an empty string
|
|
func (tc *TagCollection) Get(idx int) string {
|
|
if idx < tc.Length() {
|
|
return tc.list[idx]
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// Clear empties the list of Tags
|
|
func (tc *TagCollection) Clear() {
|
|
tc.list = tc.list[:0]
|
|
}
|
|
|
|
// Index finds the index of the given string or -1 if not found
|
|
func (tc *TagCollection) Index(t string) int {
|
|
for i, tst := range tc.list {
|
|
if tst == t {
|
|
return i
|
|
}
|
|
}
|
|
return -1
|
|
}
|
|
|
|
// Insert inserts a string into the collection at i
|
|
func (tc *TagCollection) Insert(i int, t string) {
|
|
if i < 0 || i > tc.Length() {
|
|
fmt.Println("gime: Attempted to insert string at invalid index")
|
|
}
|
|
tc.list = append(tc.list, "")
|
|
copy(tc.list[i+1:], tc.list[i:])
|
|
tc.list[i] = t
|
|
}
|
|
|
|
// Remove removes the string at i from the collection
|
|
func (tc *TagCollection) Remove(i int) {
|
|
if i < 0 || i >= tc.Length() {
|
|
fmt.Println("gime: Attempted to remove tag at invalid index")
|
|
}
|
|
copy(tc.list[i:], tc.list[i+1:])
|
|
tc.list[len(tc.list)-1] = ""
|
|
tc.list = tc.list[:len(tc.list)-1]
|
|
}
|
|
|
|
// Push adds an element to the end of the collection
|
|
func (tc *TagCollection) Push(t string) {
|
|
tc.Insert(tc.Length(), t)
|
|
}
|
|
|
|
// Pop removes the last element from the collection
|
|
func (tc *TagCollection) Pop() string {
|
|
ret := tc.list[tc.Length()-1]
|
|
tc.Remove(tc.Length() - 1)
|
|
return ret
|
|
}
|
|
|
|
// Unshift adds an element to the front of the collection
|
|
func (tc *TagCollection) Unshift(t string) {
|
|
tc.Insert(0, t)
|
|
}
|
|
|
|
// Shift removes an element from the front of the collection
|
|
func (tc *TagCollection) Shift() string {
|
|
ret := tc.list[0]
|
|
tc.Remove(0)
|
|
return ret
|
|
}
|