forgot to use commit uniquefifo.go
This commit is contained in:
parent
a122f72af7
commit
9dabd87f06
82
uniquefifo.go
Normal file
82
uniquefifo.go
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
type UniqueFifo struct {
|
||||||
|
slice []string
|
||||||
|
mu sync.Mutex
|
||||||
|
size int
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func newUniqueFifo(size int) *UniqueFifo {
|
||||||
|
q := UniqueFifo{}
|
||||||
|
q.slice = make([]string, 0)
|
||||||
|
q.size = size
|
||||||
|
return &q
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *UniqueFifo) Add(v string) bool {
|
||||||
|
ret := false
|
||||||
|
if len(q.slice) == 0 {
|
||||||
|
q.slice = append(q.slice, v)
|
||||||
|
//logDebug.Print("Condition 1 for ", v)
|
||||||
|
ret = false
|
||||||
|
} else {
|
||||||
|
i := q.Contains(v)
|
||||||
|
if i != -1 {
|
||||||
|
q.Remove(i)
|
||||||
|
//logDebug.Print("Condition 2 for ", v)
|
||||||
|
ret = true
|
||||||
|
} else {
|
||||||
|
//logDebug.Print("Condition 3 for ", v)
|
||||||
|
ret = false
|
||||||
|
}
|
||||||
|
q.slice = append(q.slice, "")
|
||||||
|
copy(q.slice[1:], q.slice)
|
||||||
|
q.slice[0] = v
|
||||||
|
if len(q.slice) <= q.size {
|
||||||
|
q.slice = q.slice[:len(q.slice)]
|
||||||
|
} else {
|
||||||
|
q.slice = q.slice[:q.size]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *UniqueFifo) Remove(r int) {
|
||||||
|
f := q.slice[:r]
|
||||||
|
e := q.slice[r+1:]
|
||||||
|
q.slice = f
|
||||||
|
q.slice = append(q.slice, e...)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func (q *UniqueFifo) Contains(v string) int {
|
||||||
|
for i, val := range q.slice {
|
||||||
|
if val == v {
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
func main() {
|
||||||
|
u := newUniqueFifo(3)
|
||||||
|
u.Add("First")
|
||||||
|
u.Add("First")
|
||||||
|
fmt.Println(u)
|
||||||
|
u.Add("Second")
|
||||||
|
fmt.Println(u)
|
||||||
|
u.Add("First")
|
||||||
|
fmt.Println(u)
|
||||||
|
u.Add("Third")
|
||||||
|
fmt.Println(u)
|
||||||
|
u.Add("Fourth")
|
||||||
|
fmt.Println(u)
|
||||||
|
}
|
||||||
|
*/
|
Loading…
x
Reference in New Issue
Block a user