MCPcopy Create free account
hub / github.com/Kitware/VTK / IsStructureValid

Method IsStructureValid

Common/DataModel/vtkDirectedGraph.cxx:40–88  ·  view source on GitHub ↗

------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

38
39//------------------------------------------------------------------------------
40bool vtkDirectedGraph::IsStructureValid(vtkGraph* g)
41{
42 if (!g)
43 {
44 return false;
45 }
46 if (vtkDirectedGraph::SafeDownCast(g))
47 {
48 return true;
49 }
50
51 // Verify that each edge appears in exactly one in and one out edge list.
52 std::vector<bool> in(g->GetNumberOfEdges(), false);
53 std::vector<bool> out(g->GetNumberOfEdges(), false);
54 vtkSmartPointer<vtkInEdgeIterator> inIter = vtkSmartPointer<vtkInEdgeIterator>::New();
55 vtkSmartPointer<vtkOutEdgeIterator> outIter = vtkSmartPointer<vtkOutEdgeIterator>::New();
56 for (vtkIdType v = 0; v < g->GetNumberOfVertices(); ++v)
57 {
58 g->GetInEdges(v, inIter);
59 while (inIter->HasNext())
60 {
61 vtkIdType id = inIter->Next().Id;
62 if (in[id])
63 {
64 return false;
65 }
66 in[id] = true;
67 }
68 g->GetOutEdges(v, outIter);
69 while (outIter->HasNext())
70 {
71 vtkIdType id = outIter->Next().Id;
72 if (out[id])
73 {
74 return false;
75 }
76 out[id] = true;
77 }
78 }
79 for (vtkIdType i = 0; i < g->GetNumberOfEdges(); ++i)
80 {
81 if (!in[i] || !out[i])
82 {
83 return false;
84 }
85 }
86
87 return true;
88}
89
90//------------------------------------------------------------------------------
91void vtkDirectedGraph::PrintSelf(ostream& os, vtkIndent indent)

Callers

nothing calls this directly

Calls 7

GetNumberOfVerticesMethod · 0.80
GetOutEdgesMethod · 0.80
NewFunction · 0.50
GetNumberOfEdgesMethod · 0.45
GetInEdgesMethod · 0.45
HasNextMethod · 0.45
NextMethod · 0.45

Tested by

no test coverage detected