initial commit
[govpp.git] / vendor / github.com / onsi / gomega / matchers / support / goraph / edge / edge.go
1 package edge
2
3 import . "github.com/onsi/gomega/matchers/support/goraph/node"
4
5 type Edge struct {
6         Node1 Node
7         Node2 Node
8 }
9
10 type EdgeSet []Edge
11
12 func (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
22 func (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
32 func (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
42 func (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 }