本文整理汇总了Golang中github.com/janelia-flyem/dvid/storage.GraphDB.GetVertices方法的典型用法代码示例。如果您正苦于以下问题:Golang GraphDB.GetVertices方法的具体用法?Golang GraphDB.GetVertices怎么用?Golang GraphDB.GetVertices使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/janelia-flyem/dvid/storage.GraphDB
的用法示例。
在下文中一共展示了GraphDB.GetVertices方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: handleSubgraphBulk
// handleSubgraph loads, retrieves, or deletes a subgraph (more description in REST interface)
func (d *Data) handleSubgraphBulk(ctx *datastore.VersionedCtx, db storage.GraphDB, w http.ResponseWriter, labelgraph *LabelGraph, method string) error {
var err error
if !d.setBusy() {
return fmt.Errorf("Server busy with bulk transaction")
}
defer d.setNotBusy()
// initial new graph
labelgraph2 := new(LabelGraph)
labelgraph2.Transactions = make([]transactionItem, 0)
labelgraph2.Vertices = make([]labelVertex, 0)
labelgraph2.Edges = make([]labelEdge, 0)
// ?! do not grab edges that connect to outside vertices
if method == "get" {
var vertices []dvid.GraphVertex
var edges []dvid.GraphEdge
if len(labelgraph.Vertices) > 0 {
used_vertices := make(map[dvid.VertexID]struct{})
for _, vertex := range labelgraph.Vertices {
used_vertices[vertex.Id] = struct{}{}
storedvert, err := db.GetVertex(ctx, vertex.Id)
if err != nil {
return fmt.Errorf("Failed to retrieve vertix %d: %v\n", vertex.Id, err)
}
vertices = append(vertices, storedvert)
for _, vert2 := range storedvert.Vertices {
if _, ok := used_vertices[vert2]; !ok {
edge, err := db.GetEdge(ctx, storedvert.Id, vert2)
if err != nil {
return fmt.Errorf("Failed to retrieve edge %d-%d: %v\n", storedvert.Id, vert2, err)
}
edges = append(edges, edge)
}
}
}
} else {
// if no set of vertices are supplied, just grab the whole graph
vertices, err = db.GetVertices(ctx)
if err != nil {
return fmt.Errorf("Failed to retrieve vertices: %v\n", err)
}
edges, err = db.GetEdges(ctx)
if err != nil {
return fmt.Errorf("Failed to retrieve edges: %v\n", err)
}
}
for _, vertex := range vertices {
labelgraph2.Vertices = append(labelgraph2.Vertices, labelVertex{vertex.Id, vertex.Weight})
}
for _, edge := range edges {
labelgraph2.Edges = append(labelgraph2.Edges, labelEdge{edge.Vertexpair.Vertex1, edge.Vertexpair.Vertex2, edge.Weight})
}
m, err := json.Marshal(labelgraph2)
if err != nil {
return fmt.Errorf("Could not serialize graph")
}
w.Header().Set("Content-Type", "application/json")
fmt.Fprintf(w, string(m))
} else if method == "post" {
// add list of vertices and edges from supplied JSON -- overwrite existing values
for _, vertex := range labelgraph.Vertices {
err := db.AddVertex(ctx, vertex.Id, vertex.Weight)
if err != nil {
return fmt.Errorf("Failed to add vertex: %v\n", err)
}
}
for _, edge := range labelgraph.Edges {
err := db.AddEdge(ctx, edge.Id1, edge.Id2, edge.Weight)
if err != nil {
return fmt.Errorf("Failed to add edge: %v\n", err)
}
}
} else if method == "delete" {
// delete the vertices supplied and all of their edges or delete the whole graph
if len(labelgraph.Vertices) > 0 || len(labelgraph.Edges) > 0 {
for _, vertex := range labelgraph.Vertices {
db.RemoveVertex(ctx, vertex.Id)
}
for _, edge := range labelgraph.Edges {
db.RemoveEdge(ctx, edge.Id1, edge.Id2)
}
} else {
err = db.RemoveGraph(ctx)
if err != nil {
return fmt.Errorf("Failed to remove graph: %v\n", err)
}
}
} else {
err = fmt.Errorf("Does not support PUT")
}
return err
}