-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathurlcollection.go
60 lines (50 loc) · 1.1 KB
/
urlcollection.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package crawler
import (
"sync"
"github.com/danielemoraschi/go-sitemap-common/http"
)
type UrlCollectionInterface interface {
Data() []http.HttpResource
}
type UrlCollection struct {
sync.RWMutex
data []http.HttpResource
}
func (s *UrlCollection) AddList(values []http.HttpResource) {
s.Lock()
s.data = append(s.data, values...)
s.Unlock()
}
func (s *UrlCollection) Add(values http.HttpResource) {
s.Lock()
s.data = append(s.data, values)
s.Unlock()
}
func (s *UrlCollection) Reset() {
s.Lock()
s.data = []http.HttpResource{}
s.Unlock()
}
func (s *UrlCollection) Data() []http.HttpResource {
s.RLock()
n := s.data
s.RUnlock()
return n
}
func (s *UrlCollection) Count() int {
s.RLock()
n := len(s.data)
s.RUnlock()
return n
}
func (s *UrlCollection) RemoveDuplicatesUnordered() {
encountered := map[string]http.HttpResource{}
// Create a map of all unique elements.
for v, el := range s.data {
encountered[s.data[v].String()] = el
}
s.Reset()
for _, el := range encountered {
s.Add(el)
}
}