00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00040 #ifndef __vtkPBGLDistributedGraphHelper_h
00041 #define __vtkPBGLDistributedGraphHelper_h
00042
00043 #include "vtkDistributedGraphHelper.h"
00044
00045 class vtkPBGLDistributedGraphHelperInternals;
00046
00047
00048 namespace boost { namespace graph { namespace distributed {
00049 class mpi_process_group;
00050 } } }
00051
00052
00053 class VTK_PARALLEL_EXPORT vtkPBGLDistributedGraphHelper : public vtkDistributedGraphHelper
00054 {
00055 public:
00056 vtkTypeMacro (vtkPBGLDistributedGraphHelper,
00057 vtkDistributedGraphHelper);
00058
00060 static vtkPBGLDistributedGraphHelper* New();
00061
00068 void Synchronize();
00069
00071 vtkDistributedGraphHelper *Clone();
00072
00073
00075
00076 boost::graph::distributed::mpi_process_group GetProcessGroup();
00077
00079
00082 vtkPBGLDistributedGraphHelperInternals *Internals;
00083
00084 void PrintSelf(ostream& os, vtkIndent indent);
00085
00086 protected:
00087 vtkPBGLDistributedGraphHelper();
00088 ~vtkPBGLDistributedGraphHelper();
00089
00090
00091 enum Tags
00092 {
00093
00094 FIND_VERTEX_TAG,
00095
00096
00097 FIND_EDGE_SOURCE_TARGET_TAG,
00098
00099
00100 ADD_VERTEX_NO_REPLY_TAG,
00101 ADD_VERTEX_WITH_REPLY_TAG,
00102
00103
00104 ADD_VERTEX_PROPS_NO_REPLY_TAG,
00105 ADD_VERTEX_PROPS_WITH_REPLY_TAG,
00106
00107
00108 ADD_DIRECTED_BACK_EDGE_TAG,
00109 ADD_UNDIRECTED_BACK_EDGE_TAG,
00110
00111
00112 ADD_DIRECTED_EDGE_NO_REPLY_TAG,
00113 ADD_UNDIRECTED_EDGE_NO_REPLY_TAG,
00114
00115
00116 ADD_DIRECTED_EDGE_WITH_REPLY_TAG,
00117 ADD_UNDIRECTED_EDGE_WITH_REPLY_TAG,
00118
00119
00120 ADD_DIRECTED_EDGE_NI_NO_REPLY_TAG,
00121 ADD_UNDIRECTED_EDGE_NI_NO_REPLY_TAG,
00122
00123
00124 ADD_DIRECTED_EDGE_NI_WITH_REPLY_TAG,
00125 ADD_UNDIRECTED_EDGE_NI_WITH_REPLY_TAG,
00126
00127
00128 ADD_DIRECTED_EDGE_IN_NO_REPLY_TAG,
00129 ADD_UNDIRECTED_EDGE_IN_NO_REPLY_TAG,
00130
00131
00132 ADD_DIRECTED_EDGE_NN_NO_REPLY_TAG,
00133 ADD_UNDIRECTED_EDGE_NN_NO_REPLY_TAG
00134
00135 };
00136
00138
00143 void AddVertexInternal(vtkVariantArray *propertyArr,
00144 vtkIdType *vertex);
00146
00149 void AddVertexInternal(const vtkVariant& pedigreeId, vtkIdType *vertex);
00150
00152
00156 void AddEdgeInternal(vtkIdType u, vtkIdType v, bool directed,
00157 vtkVariantArray *propertyArr,
00158 vtkEdgeType *edge);
00160
00162
00168 void AddEdgeInternal(const vtkVariant& uPedigreeId, vtkIdType v,
00169 bool directed, vtkVariantArray *propertyArr,
00170 vtkEdgeType *edge);
00172
00174
00180 void AddEdgeInternal(vtkIdType u, const vtkVariant& vPedigreeId,
00181 bool directed, vtkVariantArray *propertyArr,
00182 vtkEdgeType *edge);
00184
00186
00193 void AddEdgeInternal(const vtkVariant& uPedigreeId,
00194 const vtkVariant& vPedigreeId,
00195 bool directed, vtkVariantArray *propertyArr,
00196 vtkEdgeType *edge);
00197
00198
00199
00200
00201 vtkIdType FindVertex(const vtkVariant& pedigreeId);
00203
00205
00208 void FindEdgeSourceAndTarget(vtkIdType id,
00209 vtkIdType *source, vtkIdType *target);
00211
00213
00215 void AttachToGraph(vtkGraph *graph);
00216
00218
00219 private:
00220 vtkPBGLDistributedGraphHelper(const vtkPBGLDistributedGraphHelper&);
00221 void operator=(const vtkPBGLDistributedGraphHelper&);
00222
00223
00224 friend class vtkPBGLDistributedGraphHelperInternals;
00225
00226 };
00227
00228 #endif // __vtkPBGLDistributedGraphHelper_h