1 /*=========================================================================
2 
3   Program:   Visualization Toolkit
4   Module:    vtkGraphInternals.cxx
5 
6   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7   All rights reserved.
8   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10      This software is distributed WITHOUT ANY WARRANTY; without even
11      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12      PURPOSE.  See the above copyright notice for more information.
13 
14 =========================================================================*/
15 /*----------------------------------------------------------------------------
16  Copyright (c) Sandia Corporation
17  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
18 ----------------------------------------------------------------------------*/
19 #include "vtkGraphInternals.h"
20 
21 #include "vtkDistributedGraphHelper.h"
22 #include "vtkObjectFactory.h"
23 
24 vtkStandardNewMacro(vtkGraphInternals);
25 
26 //------------------------------------------------------------------------------
vtkGraphInternals()27 vtkGraphInternals::vtkGraphInternals()
28 {
29   this->NumberOfEdges = 0;
30   this->LastRemoteEdgeId = -1;
31   this->UsingPedigreeIds = false;
32 }
33 
34 //------------------------------------------------------------------------------
35 vtkGraphInternals::~vtkGraphInternals() = default;
36 
37 //------------------------------------------------------------------------------
PrintSelf(ostream & os,vtkIndent indent)38 void vtkGraphInternals::PrintSelf(ostream& os, vtkIndent indent)
39 {
40   this->Superclass::PrintSelf(os, indent);
41   os << indent << "NumberOfEdges: " << this->NumberOfEdges << endl;
42   os << indent << "LastRemoteEdgeId: " << this->LastRemoteEdgeId << endl;
43   os << indent << "LastRemoteEdgeSource: " << this->LastRemoteEdgeSource << endl;
44   os << indent << "LastRemoteEdgeTarget: " << this->LastRemoteEdgeTarget << endl;
45   os << indent << "UsingPedigreeIds: " << this->UsingPedigreeIds << endl;
46 }
47 
48 //------------------------------------------------------------------------------
RemoveEdgeFromOutList(vtkIdType e,std::vector<vtkOutEdgeType> & outEdges)49 void vtkGraphInternals::RemoveEdgeFromOutList(vtkIdType e, std::vector<vtkOutEdgeType>& outEdges)
50 {
51   size_t outSize = outEdges.size();
52   size_t i = 0;
53   for (; i < outSize; ++i)
54   {
55     if (outEdges[i].Id == e)
56     {
57       break;
58     }
59   }
60   if (i == outSize)
61   {
62     vtkErrorMacro("Could not find edge in source edge list.");
63     return;
64   }
65   outEdges[i] = outEdges[outSize - 1];
66   outEdges.pop_back();
67 }
68 
69 //------------------------------------------------------------------------------
RemoveEdgeFromInList(vtkIdType e,std::vector<vtkInEdgeType> & inEdges)70 void vtkGraphInternals::RemoveEdgeFromInList(vtkIdType e, std::vector<vtkInEdgeType>& inEdges)
71 {
72   size_t inSize = inEdges.size();
73   size_t i = 0;
74   for (; i < inSize; ++i)
75   {
76     if (inEdges[i].Id == e)
77     {
78       break;
79     }
80   }
81   if (i == inSize)
82   {
83     vtkErrorMacro("Could not find edge in source edge list.");
84     return;
85   }
86   inEdges[i] = inEdges[inSize - 1];
87   inEdges.pop_back();
88 }
89 
90 //------------------------------------------------------------------------------
ReplaceEdgeFromOutList(vtkIdType from,vtkIdType to,std::vector<vtkOutEdgeType> & outEdges)91 void vtkGraphInternals::ReplaceEdgeFromOutList(
92   vtkIdType from, vtkIdType to, std::vector<vtkOutEdgeType>& outEdges)
93 {
94   size_t outSize = outEdges.size();
95   for (size_t i = 0; i < outSize; ++i)
96   {
97     if (outEdges[i].Id == from)
98     {
99       outEdges[i].Id = to;
100     }
101   }
102 }
103 
104 //------------------------------------------------------------------------------
ReplaceEdgeFromInList(vtkIdType from,vtkIdType to,std::vector<vtkInEdgeType> & inEdges)105 void vtkGraphInternals::ReplaceEdgeFromInList(
106   vtkIdType from, vtkIdType to, std::vector<vtkInEdgeType>& inEdges)
107 {
108   size_t inSize = inEdges.size();
109   for (size_t i = 0; i < inSize; ++i)
110   {
111     if (inEdges[i].Id == from)
112     {
113       inEdges[i].Id = to;
114     }
115   }
116 }
117