package edge import . "github.com/onsi/gomega/matchers/support/goraph/node" type Edge struct { Node1 Node Node2 Node } type EdgeSet []Edge func (ec EdgeSet) Free(node Node) bool { for _, e := range ec { if e.Node1 == node || e.Node2 == node { return false } } return true } func (ec EdgeSet) Contains(edge Edge) bool { for _, e := range ec { if e == edge { return true } } return false } func (ec EdgeSet) FindByNodes(node1, node2 Node) (Edge, bool) { for _, e := range ec { if (e.Node1 == node1 && e.Node2 == node2) || (e.Node1 == node2 && e.Node2 == node1) { return e, true } } return Edge{}, false } func (ec EdgeSet) SymmetricDifference(ec2 EdgeSet) EdgeSet { edgesToInclude := make(map[Edge]bool) for _, e := range ec { edgesToInclude[e] = true } for _, e := range ec2 { edgesToInclude[e] = !edgesToInclude[e] } result := EdgeSet{} for e, include := range edgesToInclude { if include { result = append(result, e) } } return result }