diff --git a/edge_test.go b/edge_test.go index 6c1cf4c..0c8adbf 100644 --- a/edge_test.go +++ b/edge_test.go @@ -6,7 +6,7 @@ func ExampleNewEdge() { va := NewVertex("aaa") vb := NewVertex("bbb") vc := NewVertex("ccc") - vc.SetAttr(NewAttr("ddd", "eee")) + vc.AddAttr(NewAttr("ddd", "eee")) eab := NewEdge(va, vb) eac := NewEdge(va, vc) diff --git a/graph.go b/graph.go index 6f90dd9..726478a 100644 --- a/graph.go +++ b/graph.go @@ -13,7 +13,7 @@ type Graph interface { AddEdge(...Edge) Vertices() []Vertex Edges() []Edge - StandaloneVertices() []Vertex + IsolatedVertices() []Vertex } type graph struct { @@ -31,17 +31,17 @@ func NewGraph() Graph { func (g *graph) Vertices() []Vertex { return g.vertices } func (g *graph) Edges() []Edge { return g.edges } -func (g *graph) StandaloneVertices() []Vertex { - standaloneVertices := map[string]Vertex{} +func (g *graph) IsolatedVertices() []Vertex { + isolatedVertices := map[string]Vertex{} for _, vertex := range g.vertices { - standaloneVertices[vertex.ID()] = vertex + isolatedVertices[vertex.ID()] = vertex } for _, edge := range g.edges { - standaloneVertices[edge.Src().ID()] = nil - standaloneVertices[edge.Dst().ID()] = nil + isolatedVertices[edge.Src().ID()] = nil + isolatedVertices[edge.Dst().ID()] = nil } filtered := []Vertex{} - for _, vertex := range standaloneVertices { + for _, vertex := range isolatedVertices { if vertex != nil { filtered = append(filtered, vertex) } @@ -56,7 +56,7 @@ func (g *graph) String() string { for _, edge := range g.edges { elems = append(elems, edge.String()) } - for _, vertex := range g.StandaloneVertices() { + for _, vertex := range g.IsolatedVertices() { elems = append(elems, vertex.ID()) } return fmt.Sprintf("{%s}", strings.Join(elems, ",")) diff --git a/vertex.go b/vertex.go index 4cbaa60..094d69c 100644 --- a/vertex.go +++ b/vertex.go @@ -10,12 +10,12 @@ type Vertex interface { ID() string - AddEdge(edge Edge) + AddEdge(edges ...Edge) Edges() []Edge CleanEdges() - SetAttr(Attr) - DelAttr(key interface{}) + AddAttr(attrs ...Attr) + DelAttr(keys ...interface{}) GetAttr(key interface{}) interface{} HasAttr(key interface{}) bool CleanAttrs() @@ -44,11 +44,11 @@ func (n *vertex) CleanAttrs() { n.attrs = nil } -func (n *vertex) AddEdge(edge Edge) { +func (n *vertex) AddEdge(edge ...Edge) { if n.edges == nil { n.edges = make([]Edge, 0) } - n.edges = append(n.edges, edge) + n.edges = append(n.edges, edge...) } func (n *vertex) HasAttr(key interface{}) bool { @@ -75,22 +75,26 @@ func (n *vertex) GetAttr(key interface{}) interface{} { return nil } -func (n *vertex) SetAttr(attr Attr) { - n.DelAttr(attr.Key()) +func (n *vertex) AddAttr(attrs ...Attr) { + for _, attr := range attrs { + n.DelAttr(attr.Key()) + } if n.attrs == nil { n.attrs = make([]Attr, 0) } - n.attrs = append(n.attrs, attr) + n.attrs = append(n.attrs, attrs...) } -func (n *vertex) DelAttr(key interface{}) { +func (n *vertex) DelAttr(keys ...interface{}) { if n.attrs == nil { return } - for idx, attr := range n.attrs { - if attr.Key() == key { - n.attrs = append(n.attrs[:idx], n.attrs[idx+1:]...) - return + for _, key := range keys { + for idx, attr := range n.attrs { + if attr.Key() == key { + n.attrs = append(n.attrs[:idx], n.attrs[idx+1:]...) + return + } } } } diff --git a/vertex_test.go b/vertex_test.go index a70b2a8..c330dc7 100644 --- a/vertex_test.go +++ b/vertex_test.go @@ -3,20 +3,21 @@ package graphman import "fmt" func ExampleNewVertex() { - a := NewVertex("aaa") - fmt.Println(a) - fmt.Println(a.ID()) + va := NewVertex("aaa") + fmt.Println(va) + fmt.Println(va.ID()) fmt.Println() - b := NewVertex("bbb") - b.SetAttr(NewAttr("ccc", "ddd")) - b.SetAttr(NewAttr(42, []string{"eee", "fff"})) - b.SetAttr(NewAttr("ggg", "hhh")) - b.DelAttr("ggg") - b.DelAttr("iii") - fmt.Println(b) - fmt.Println(b.ID()) + vb := NewVertex("bbb") + vb.AddAttr( + NewAttr("ccc", "ddd"), + NewAttr(42, []string{"eee", "fff"}), + NewAttr("ggg", "hhh"), + ) + vb.DelAttr("ggg", "iii") + fmt.Println(vb) + fmt.Println(vb.ID()) // Output: // aaa