go_study/fabric-main/common/graph/graph.go

46 lines
975 B
Go

/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package graph
// Vertex defines a vertex of a graph
type Vertex struct {
Id string
Data interface{}
neighbors map[string]*Vertex
}
// NewVertex creates a new vertex with given id and data
func NewVertex(id string, data interface{}) *Vertex {
return &Vertex{
Id: id,
Data: data,
neighbors: make(map[string]*Vertex),
}
}
// NeighborById returns a neighbor vertex with the given id,
// or nil if no vertex with such an id is a neighbor
func (v *Vertex) NeighborById(id string) *Vertex {
return v.neighbors[id]
}
// Neighbors returns the neighbors of the vertex
func (v *Vertex) Neighbors() []*Vertex {
var res []*Vertex
for _, u := range v.neighbors {
res = append(res, u)
}
return res
}
// AddNeighbor adds the given vertex as a neighbor
// of the vertex
func (v *Vertex) AddNeighbor(u *Vertex) {
v.neighbors[u.Id] = u
u.neighbors[v.Id] = v
}