00001 #ifndef VertexToPointIterator_HEADER 00002 #define VertexToPointIterator_HEADER 00003 00004 #include <boost/iterator/transform_iterator.hpp> 00005 #include <boost/pointee.hpp> 00006 00007 // Given a vertex iterator, create a point iterator. 00008 template <class VertexP, unsigned d> struct VertexToPoint { 00009 typedef const typename Geometry::Point<d>& result_type; 00010 result_type operator() (const VertexP v) const { 00011 return v->toPoint(); 00012 } 00013 }; 00014 00015 template <class vertex_iterator, unsigned d> 00016 struct VertexToPointIterator : public boost::transform_iterator 00017 < VertexToPoint < typename boost::pointee <vertex_iterator> :: type , d > 00018 , vertex_iterator 00019 > 00020 { 00021 typedef VertexToPoint<typename boost::pointee<vertex_iterator> :: type, d> VtP; 00022 typedef boost::transform_iterator<VtP, vertex_iterator> super; 00023 00024 VertexToPointIterator(const vertex_iterator& iit) : super(iit, VtP()) { } 00025 }; 00026 00027 template <unsigned d, class vertex_iterator> 00028 VertexToPointIterator <vertex_iterator,d> vertex_to_point(const vertex_iterator& it) { 00029 return it; 00030 } 00031 00032 #endif
1.4.6