github.com/onsi/gomega@v1.32.0/matchers/support/goraph/edge/edge.go (about) 1 package edge 2 3 import . "github.com/onsi/gomega/matchers/support/goraph/node" 4 5 type Edge struct { 6 Node1 int 7 Node2 int 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.ID || e.Node2 == node.ID { 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.ID && e.Node2 == node2.ID) || (e.Node1 == node2.ID && e.Node2 == node1.ID) { 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 }