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