VTK
vtkDistributedGraphHelper.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkDistributedGraphHelper.h
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) 2008 The Trustees of Indiana University.
17 * Use, modification and distribution is subject to the Boost Software
18 * License, Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt)
19 */
20
56#ifndef vtkDistributedGraphHelper_h
57#define vtkDistributedGraphHelper_h
58
59#include "vtkCommonDataModelModule.h" // For export macro
60#include "vtkObject.h"
61
62class vtkDistributedGraphHelperInternals;
63struct vtkEdgeType;
64class vtkGraph;
65class vtkVariant;
66class vtkVariantArray;
68
69// .NAME vtkVertexPedigreeIdDistributionFunction - The type of a
70// function used to determine how to distribute vertex pedigree IDs
71// across processors in a vtkGraph. The pedigree ID distribution
72// function takes the pedigree ID of the vertex and a user-supplied
73// void pointer and returns a hash value V. A vertex with that
74// pedigree ID will reside on processor V % P, where P is the number
75// of processors. This type is used in conjunction with the
76// vtkDistributedGraphHelper class.
78 (const vtkVariant& pedigreeId, void* userData);
79
80class VTKCOMMONDATAMODEL_EXPORT vtkDistributedGraphHelper : public vtkObject
81{
82 public:
84 void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
85
90
95
100
106
111
120 void *userData);
121
126
135 virtual void Synchronize() = 0;
136
143
145
155
156 protected:
159
167 virtual void AddVertexInternal(vtkVariantArray *propertyArr,
168 vtkIdType *vertex) = 0;
169
174 virtual void AddVertexInternal(const vtkVariant& pedigreeId, vtkIdType *vertex) = 0;
175
182 virtual void AddEdgeInternal(vtkIdType u, vtkIdType v, bool directed,
183 vtkVariantArray *propertyArr,
184 vtkEdgeType *edge) = 0;
185
194 virtual void AddEdgeInternal(const vtkVariant& uPedigreeId, vtkIdType v,
195 bool directed, vtkVariantArray *propertyArr,
196 vtkEdgeType *edge) = 0;
197
206 virtual void AddEdgeInternal(vtkIdType u, const vtkVariant& vPedigreeId,
207 bool directed, vtkVariantArray *propertyArr,
208 vtkEdgeType *edge) = 0;
209
219 virtual void AddEdgeInternal(const vtkVariant& uPedigreeId,
220 const vtkVariant& vPedigreeId,
221 bool directed, vtkVariantArray *propertyArr,
222 vtkEdgeType *edge) = 0;
223
229 virtual vtkIdType FindVertex(const vtkVariant& pedigreeId) = 0;
230
236 virtual void
237 FindEdgeSourceAndTarget(vtkIdType id,
239
244 virtual void AttachToGraph(vtkGraph *graph);
245
249 vtkGraph *Graph;
250
255
259 void *VertexDistributionUserData;
260
264 vtkIdType signBitMask;
265
269 vtkIdType highBitShiftMask;
270
274 int procBits;
275
279 int indexBits;
280
281 private:
282 vtkDistributedGraphHelper(const vtkDistributedGraphHelper&) VTK_DELETE_FUNCTION;
283 void operator=(const vtkDistributedGraphHelper&) VTK_DELETE_FUNCTION;
284
285 friend class vtkGraph;
286
287};
288
289#endif // vtkDistributedGraphHelper_h
helper for the vtkGraph class that allows the graph to be distributed across multiple memory spaces.
vtkIdType GetEdgeOwner(vtkIdType e_id) const
Returns owner of edge with ID e_id, by extracting top ceil(log2 P) bits of e_id.
virtual vtkDistributedGraphHelper * Clone()=0
Clones the distributed graph helper, returning another distributed graph helper of the same kind that...
vtkIdType MakeDistributedId(int owner, vtkIdType local)
Builds a distributed ID consisting of the given owner and the local ID.
vtkIdType GetVertexOwner(vtkIdType v) const
Returns owner of vertex v, by extracting top ceil(log2 P) bits of v.
static vtkInformationIntegerKey * DISTRIBUTEDEDGEIDS()
vtkIdType GetEdgeIndex(vtkIdType e_id) const
Returns local index of edge with ID e_id, by masking off top ceil(log2 P) bits of e_id.
static vtkInformationIntegerKey * DISTRIBUTEDVERTEXIDS()
Information Keys that distributed graphs can append to attribute arrays to flag them as containing di...
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetVertexPedigreeIdDistribution(vtkVertexPedigreeIdDistribution Func, void *userData)
Set the pedigreeId -> processor distribution function that determines how vertices are distributed wh...
vtkIdType GetVertexOwnerByPedigreeId(const vtkVariant &pedigreeId)
Determine which processor owns the vertex with the given pedigree ID.
vtkIdType GetVertexIndex(vtkIdType v) const
Returns local index of vertex v, by masking off top ceil(log2 P) bits of v.
~vtkDistributedGraphHelper() override
virtual void Synchronize()=0
Synchronizes all of the processors involved in this distributed graph, so that all processors have a ...
Base class for graph data types.
Definition: vtkGraph.h:288
a simple class to control print indentation
Definition: vtkIndent.h:40
Key for integer values in vtkInformation.
abstract base class for most VTK objects
Definition: vtkObject.h:60
An array holding vtkVariants.
A atomic type representing the union of many types.
Definition: vtkVariant.h:76
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
boost::graph_traits< vtkGraph * >::vertex_descriptor target(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
vtkIdType(* vtkVertexPedigreeIdDistribution)(const vtkVariant &pedigreeId, void *userData)
int vtkIdType
Definition: vtkType.h:287