30 #ifndef vtkBoostGraphAdapter_h
31 #define vtkBoostGraphAdapter_h
49 #include <boost/version.hpp>
59 struct read_write_property_map_tag;
61 #define vtkPropertyMapMacro(T, V) \
63 struct property_traits<T*> \
65 typedef V value_type; \
66 typedef V reference; \
67 typedef vtkIdType key_type; \
68 typedef read_write_property_map_tag category; \
71 inline property_traits<T*>::reference \
74 property_traits<T*>::key_type key) \
76 return arr->GetValue(key); \
82 property_traits<T*>::key_type key, \
83 const property_traits<T*>::value_type & value) \
85 arr->InsertValue(key, value); \
106 return arr->GetTuple1(
key);
128 return arr->GetVariantValue(
key);
136 #if defined(_MSC_VER)
146 #include <boost/config.hpp>
147 #include <boost/iterator/iterator_facade.hpp>
148 #include <boost/graph/graph_traits.hpp>
149 #include <boost/graph/properties.hpp>
150 #include <boost/graph/adjacency_iterator.hpp>
159 public iterator_facade<vtk_vertex_iterator,
161 bidirectional_traversal_tag,
169 vtkIdType dereference()
const {
return index; }
172 {
return index == other.index; }
174 void increment() { index++; }
175 void decrement() { index--; }
183 public iterator_facade<vtk_edge_iterator,
185 forward_traversal_tag,
191 directed(false), vertex(v), lastVertex(v), iter(0), end(0), graph(g)
211 while (vertex < lastVertex && this->graph->
GetOutDegree(vertex) == 0)
216 if (vertex < lastVertex)
233 && vertex > iter->
Target)))
251 {
return vertex == other.vertex && iter == other.iter; }
273 && vertex > iter->
Target)))
287 while (vertex < lastVertex && this->graph->
GetOutDegree(vertex) == 0)
292 if (vertex < lastVertex)
316 public iterator_facade<vtk_out_edge_pointer_iterator,
318 bidirectional_traversal_tag,
329 g->GetOutEdges(vertex, iter, nedges);
341 {
return iter == other.iter; }
343 void increment() { iter++; }
344 void decrement() { iter--; }
353 public iterator_facade<vtk_in_edge_pointer_iterator,
355 bidirectional_traversal_tag,
366 g->GetInEdges(vertex, iter, nedges);
378 {
return iter == other.iter; }
380 void increment() { iter++; }
381 void decrement() { iter--; }
396 public virtual bidirectional_graph_tag,
397 public virtual edge_list_graph_tag,
398 public virtual vertex_list_graph_tag,
399 public virtual adjacency_graph_tag { };
419 typedef adjacency_iterator_generator<
vtkGraph*,
423 #if BOOST_VERSION >= 104500
425 struct graph_property_type<
vtkGraph* > {
426 typedef no_property
type;
440 #if BOOST_VERSION >= 104500
442 struct graph_bundle_type<
vtkGraph* > {
443 typedef no_property
type;
492 #if BOOST_VERSION >= 104500
496 : graph_property_type< vtkGraph* > { };
501 : graph_property_type< vtkGraph* > { };
524 #if BOOST_VERSION >= 104500
528 : graph_bundle_type< vtkGraph* > { };
533 : graph_bundle_type< vtkGraph* > { };
586 #if BOOST_VERSION >= 104500
590 : graph_property_type< vtkGraph* > { };
595 : graph_property_type< vtkGraph* > { };
618 #if BOOST_VERSION >= 104500
622 : graph_bundle_type< vtkGraph* > { };
627 : graph_bundle_type< vtkGraph* > { };
664 #if BOOST_VERSION >= 104500
668 : graph_property_type< vtkDirectedGraph* > { };
673 : graph_property_type< vtkDirectedGraph* > { };
696 #if BOOST_VERSION >= 104500
700 : graph_bundle_type< vtkDirectedGraph* > { };
705 : graph_bundle_type< vtkDirectedGraph* > { };
742 #if BOOST_VERSION >= 104500
746 : graph_property_type< vtkUndirectedGraph* > { };
751 : graph_property_type< vtkUndirectedGraph* > { };
774 #if BOOST_VERSION >= 104500
778 : graph_bundle_type< vtkUndirectedGraph* > { };
783 : graph_bundle_type< vtkUndirectedGraph* > { };
837 boost::graph_traits< vtkGraph* >::vertex_iterator >
840 typedef boost::graph_traits< vtkGraph* >::vertex_iterator Iter;
849 return std::make_pair( Iter(start),
855 boost::graph_traits< vtkGraph* >::edge_iterator >
858 typedef boost::graph_traits< vtkGraph* >::edge_iterator Iter;
864 boost::graph_traits< vtkGraph* >::out_edge_iterator >
869 typedef boost::graph_traits< vtkGraph* >::out_edge_iterator Iter;
870 std::pair<Iter, Iter> p = std::make_pair( Iter(g, u), Iter(g, u,
true) );
876 boost::graph_traits< vtkGraph* >::in_edge_iterator >
881 typedef boost::graph_traits< vtkGraph* >::in_edge_iterator Iter;
882 std::pair<Iter, Iter> p = std::make_pair( Iter(g, u), Iter(g, u,
true) );
888 boost::graph_traits< vtkGraph* >::adjacency_iterator >
893 typedef boost::graph_traits< vtkGraph* >::adjacency_iterator Iter;
894 typedef boost::graph_traits< vtkGraph* >::out_edge_iterator OutEdgeIter;
895 std::pair<OutEdgeIter, OutEdgeIter> out =
out_edges(u, g);
896 return std::make_pair( Iter(out.first, &g), Iter(out.second, &g) );
949 boost::graph_traits< vtkMutableDirectedGraph* >::edge_descriptor e = g->
AddEdge(u, v);
950 return std::make_pair(e,
true);
967 boost::graph_traits< vtkMutableUndirectedGraph* >::edge_descriptor e = g->
AddEdge(u, v);
968 return std::make_pair(e,
true);
999 template<
typename PMap>
1012 return get(
pmap, key.
Id);
1016 template<
typename PMap>
1022 return get(helper.pmap,
key.Id);
1025 template<
typename PMap>
1039 template<
typename PMap>
1056 template<
typename PMap>
1062 return get(helper.pmap,
key);
1065 template<
typename PMap>
1101 template<
typename PMap>
1114 template<
typename PMap>
1120 return multi.multiplier *
get(multi.pmap,
key);
1123 template<
typename PMap>
1187 #if BOOST_VERSION > 104000
1188 #include <boost/property_map/vector_property_map.hpp>
1190 #include <boost/vector_property_map.hpp>
1194 #endif // vtkBoostGraphAdapter_h
static vtkDirectedGraph * SafeDownCast(vtkObjectBase *o)
virtual vtkIdType GetNumberOfEdges()
The number of edges in the graph.
helper for the vtkGraph class that allows the graph to be distributed across multiple memory spaces...
property_traits< PMap >::reference reference
property_traits< PMap >::category category
vtk_out_edge_pointer_iterator(vtkGraph *g=0, vtkIdType v=0, bool end=false)
vtkEdgeType AddEdge(vtkIdType u, vtkIdType v)
Adds a directed edge from u to v, where u and v are vertex indices, and returns a vtkEdgeType structu...
vtkGraphEdgePropertyMapHelper(PMap m)
virtual vtkInformation * GetInformation()
Set/Get the information object associated with this data object.
read_write_property_map_tag category
vtkIdType AddVertex()
Adds a vertex to the graph and returns the index of the new vertex.
boost::graph_traits< vtkGraph * >::vertex_descriptor target(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
vtkGraphVertexPropertyMapHelper(PMap m)
virtual vtkIdType GetNumberOfVertices()
The number of vertices in the graph.
double get(vtkDataArray *const &arr, vtkIdType key)
vtk_out_edge_pointer_iterator out_edge_iterator
property_traits< PMap >::reference reference
vtkIdType degree_size_type
Abstract superclass for all arrays.
vtkGraphPropertyMapMultiplier(PMap m, float multi=1)
friend class iterator_core_access
property_traits< PMap >::category category
vtkIdType GetEdgeOwner(vtkIdType e_id) const
Returns owner of edge with ID e_id, by extracting top ceil(log2 P) bits of e_id.
vtkGraph_traversal_category traversal_category
directed_tag directed_category
vtk_in_edge_pointer_iterator in_edge_iterator
vtkIdType edges_size_type
dynamic, self-adjusting array of float
vtkIdType GetVertexOwner(vtkIdType v) const
Returns owner of vertex v, by extracting top ceil(log2 P) bits of v.
vtk_edge_iterator edge_iterator
dynamic, self-adjusting array of vtkIdType
property_traits< PMap >::key_type key_type
property_traits< PMap >::reference reference
read_write_property_map_tag category
vtkGraphIndexMap const_type
boost::graph_traits< vtkGraph * >::edges_size_type num_edges(vtkGraph *g)
vtkIdType vertices_size_type
boost::graph_traits< vtkMutableDirectedGraph * >::vertex_descriptor add_vertex(vtkMutableDirectedGraph *g)
vtkEdgeType edge_descriptor
A atomic type representing the union of many types.
boost::graph_traits< vtkDirectedGraph * >::degree_size_type in_degree(boost::graph_traits< vtkDirectedGraph * >::vertex_descriptor u, vtkDirectedGraph *g)
dynamic, self-adjusting array of double
void remove_edge(graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *g)
Base class for graph data types.
readable_property_map_tag category
dynamic, self-adjusting array of int
static vtkInformationIntegerKey * DATA_PIECE_NUMBER()
adjacency_iterator_generator< vtkGraph *, vertex_descriptor, out_edge_iterator >::type adjacency_iterator
vtkEdgeType AddEdge(vtkIdType u, vtkIdType v)
Adds an undirected edge from u to v, where u and v are vertex indices, and returns a vtkEdgeType stru...
virtual vtkIdType GetDegree(vtkIdType v)
The total of all incoming and outgoing vertices for vertex v.
undirected_tag directed_category
static vertex_descriptor null_vertex()
vtkIdType vertex_descriptor
allow_parallel_edge_tag edge_parallel_category
static edge_descriptor null_edge()
property_traits< PMap >::category category
friend class iterator_core_access
friend class iterator_core_access
abstract superclass for arrays of numeric data
std::pair< boost::graph_traits< vtkGraph * >::vertex_iterator, boost::graph_traits< vtkGraph * >::vertex_iterator > vertices(vtkGraph *g)
void put(vtkDataArray *arr, vtkIdType key, const double &value)
An editable directed graph.
bool has_no_edges(vtkGraph *g)
virtual void InsertVariantValue(vtkIdType valueIdx, vtkVariant value)=0
Insert a value into the array from a variant.
void SetTuple1(vtkIdType tupleIdx, double value)
These methods are included as convenience for the wrappers.
An editable undirected graph.
reference operator[](const key_type &key) const
virtual vtkIdType GetInDegree(vtkIdType v)
The number of incoming edges to vertex v.
vtkGraphIndexMap const_type
property_traits< PMap >::value_type value_type
boost::graph_traits< vtkGraph * >::vertices_size_type num_vertices(vtkGraph *g)
static vtkMutableDirectedGraph * SafeDownCast(vtkObjectBase *o)
vtkDistributedGraphHelper * GetDistributedGraphHelper()
Retrieves the distributed graph helper for this graph.
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
#define vtkPropertyMapMacro(T, V)
vtk_in_edge_pointer_iterator(vtkGraph *g=0, vtkIdType v=0, bool end=false)
vtk_vertex_iterator(vtkIdType i=0)
vtk_edge_iterator(vtkGraph *g=0, vtkIdType v=0)
readable_property_map_tag category
vtk_vertex_iterator vertex_iterator
reference operator[](const key_type &key) const
property_traits< PMap >::value_type value_type
boost::graph_traits< vtkGraph * >::degree_size_type degree(boost::graph_traits< vtkGraph * >::vertex_descriptor u, vtkGraph *g)
vtkIdType AddVertex()
Adds a vertex to the graph and returns the index of the new vertex.
A rooted tree data structure.
friend class iterator_core_access
virtual void GetOutEdges(vtkIdType v, vtkOutEdgeIterator *it)
Initializes the out edge iterator to iterate over all outgoing edges of vertex v. ...
std::pair< boost::graph_traits< vtkGraph * >::adjacency_iterator, boost::graph_traits< vtkGraph * >::adjacency_iterator > adjacent_vertices(boost::graph_traits< vtkGraph * >::vertex_descriptor u, vtkGraph *g)
property_traits< PMap >::value_type value_type
std::pair< boost::graph_traits< vtkMutableDirectedGraph * >::edge_descriptor, bool > add_edge(boost::graph_traits< vtkMutableDirectedGraph * >::vertex_descriptor u, boost::graph_traits< vtkMutableDirectedGraph * >::vertex_descriptor v, vtkMutableDirectedGraph *g)
std::pair< boost::graph_traits< vtkGraph * >::out_edge_iterator, boost::graph_traits< vtkGraph * >::out_edge_iterator > out_edges(boost::graph_traits< vtkGraph * >::vertex_descriptor u, vtkGraph *g)
void RemoveEdge(vtkIdType e)
Removes the edge from the graph.
boost::graph_traits< vtkGraph * >::degree_size_type out_degree(boost::graph_traits< vtkGraph * >::vertex_descriptor u, vtkGraph *g)
void RemoveEdge(vtkIdType e)
Removes the edge from the graph.
vtkIdType MakeDistributedId(int owner, vtkIdType local)
Builds a distributed ID consisting of the given owner and the local ID.
static vtkMutableUndirectedGraph * SafeDownCast(vtkObjectBase *o)
std::pair< boost::graph_traits< vtkGraph * >::edge_iterator, boost::graph_traits< vtkGraph * >::edge_iterator > edges(vtkGraph *g)
std::pair< boost::graph_traits< vtkGraph * >::in_edge_iterator, boost::graph_traits< vtkGraph * >::in_edge_iterator > in_edges(boost::graph_traits< vtkGraph * >::vertex_descriptor u, vtkGraph *g)
virtual vtkIdType GetOutDegree(vtkIdType v)
The number of outgoing edges from vertex v.