blob: 4fd15cc06944bf6a070f15e6b8991a1fd6d6d6cb [file] [log] [blame]
Matthias Andreas Benkard832a54e2019-01-29 09:27:38 +01001package edge
2
3import . "github.com/onsi/gomega/matchers/support/goraph/node"
4
5type Edge struct {
6 Node1 Node
7 Node2 Node
8}
9
10type EdgeSet []Edge
11
12func (ec EdgeSet) Free(node Node) bool {
13 for _, e := range ec {
14 if e.Node1 == node || e.Node2 == node {
15 return false
16 }
17 }
18
19 return true
20}
21
22func (ec EdgeSet) Contains(edge Edge) bool {
23 for _, e := range ec {
24 if e == edge {
25 return true
26 }
27 }
28
29 return false
30}
31
32func (ec EdgeSet) FindByNodes(node1, node2 Node) (Edge, bool) {
33 for _, e := range ec {
34 if (e.Node1 == node1 && e.Node2 == node2) || (e.Node1 == node2 && e.Node2 == node1) {
35 return e, true
36 }
37 }
38
39 return Edge{}, false
40}
41
42func (ec EdgeSet) SymmetricDifference(ec2 EdgeSet) EdgeSet {
43 edgesToInclude := make(map[Edge]bool)
44
45 for _, e := range ec {
46 edgesToInclude[e] = true
47 }
48
49 for _, e := range ec2 {
50 edgesToInclude[e] = !edgesToInclude[e]
51 }
52
53 result := EdgeSet{}
54 for e, include := range edgesToInclude {
55 if include {
56 result = append(result, e)
57 }
58 }
59
60 return result
61}