31 #ifndef CORE_DATATYPES_MESH_FACADE_ITERATORS_H
32 #define CORE_DATATYPES_MESH_FACADE_ITERATORS_H
34 #include <boost/iterator/iterator_facade.hpp>
56 template <
class VirtualMeshType,
template <
typename>
class MeshComponent>
57 class SmartMeshIterator :
public boost::iterator_facade<SmartMeshIterator<VirtualMeshType, MeshComponent>, MeshComponent<VirtualMeshType>, boost::bidirectional_traversal_tag>
61 explicit SmartMeshIterator(VirtualMeshType* vmesh = 0,
bool isEnd =
false) : iter_(0), vmesh_(vmesh), current_(vmesh)
71 vmesh_->synchronize( 2);
74 current_.setIndex(*iter_);
79 void increment() { ++iter_; }
80 void decrement() { --iter_; }
82 bool equal(
const SmartMeshIterator<VirtualMeshType, MeshComponent>& other)
const
84 return this->vmesh_ == other.vmesh_
85 && this->iter_ == other.iter_;
88 MeshComponent<VirtualMeshType>& dereference()
const
90 current_.setIndex(*iter_);
94 typename MeshComponent<VirtualMeshType>::iterator iter_;
95 VirtualMeshType* vmesh_;
96 mutable MeshComponent<VirtualMeshType> current_;
100 template <
class VirtualMeshType>
104 typedef typename VirtualMeshType::Edge::iterator
iterator;
119 typename VirtualMeshType::Node::array_type nodesFromEdge(2);
120 vmesh_->get_nodes(nodesFromEdge, index_);
122 return nodesFromEdge;
128 std::vector<Geometry::Point> ps(2);
129 for (
size_t i = 0; i < ps.size(); ++i)
130 vmesh_->get_point(ps[i], indices[i]);
136 VirtualMeshType* vmesh_;
139 template <
typename VirtualMeshType>
145 template <
class VirtualMeshType>
149 typedef typename VirtualMeshType::Face::iterator
iterator;
163 typename VirtualMeshType::Node::array_type nodesFromFace(4);
164 vmesh_->get_nodes(nodesFromFace, index_);
165 return nodesFromFace;
170 std::vector<Geometry::Point> ps(4);
171 for (
size_t i = 0; i < ps.size(); ++i)
172 vmesh_->get_point(ps[i], indices[i]);
177 typename VirtualMeshType::Edge::array_type edgesFromFace(4);
178 vmesh_->get_edges(edgesFromFace, index_);
179 return edgesFromFace;
183 VirtualMeshType* vmesh_;
186 template <
typename VirtualMeshType>
192 template <
class VirtualMeshType>
196 typedef typename VirtualMeshType::Node::iterator
iterator;
201 explicit NodeInfo(VirtualMeshType*
mesh) : synched_(false), index_(0), vmesh_(mesh) {}
208 vmesh_->get_point(p, index_);
219 typename VirtualMeshType::Edge::array_type edgesFromNode(6);
220 vmesh_->get_edges(edgesFromNode, index_);
221 return edgesFromNode;
224 mutable bool synched_;
226 VirtualMeshType* vmesh_;
229 template <
typename VirtualMeshType>
Definition: MeshFacadeIterators.h:230
VirtualMeshType::Face::iterator iterator
Definition: MeshFacadeIterators.h:149
NodeInfo(VirtualMeshType *mesh)
Definition: MeshFacadeIterators.h:201
std::vector< Geometry::Point > nodePoints() const
Definition: MeshFacadeIterators.h:125
VirtualMeshType::Edge::array_type edgeIndices() const
Definition: MeshFacadeIterators.h:211
VirtualMeshType::Node::iterator iterator
Definition: MeshFacadeIterators.h:196
Definition: MeshFacadeIterators.h:152
#define ENSURE_NOT_NULL(var, message)
Definition: Exception.h:63
void setIndex(typename VirtualMeshType::Edge::index_type i)
Definition: MeshFacadeIterators.h:114
Definition: MeshFacadeIterators.h:101
Geometry::Point point() const
Definition: MeshFacadeIterators.h:205
SmartMeshIterator< VirtualMeshType, FaceInfo > Type
Definition: MeshFacadeIterators.h:189
void setIndex(typename VirtualMeshType::Node::index_type i)
Definition: MeshFacadeIterators.h:202
std::vector< Geometry::Point > nodePoints() const
Definition: MeshFacadeIterators.h:167
VirtualMeshType::Node::array_type nodeIndices() const
Definition: MeshFacadeIterators.h:161
SmartMeshIterator< VirtualMeshType, EdgeInfo > Type
Definition: MeshFacadeIterators.h:142
SmartMeshIterator(VirtualMeshType *vmesh=0, bool isEnd=false)
Definition: MeshFacadeIterators.h:61
Definition: MeshFacadeIterators.h:199
Definition: MeshFacadeIterators.h:193
VirtualMeshType::Node::index_type index() const
Definition: MeshFacadeIterators.h:204
SmartMeshIterator< VirtualMeshType, NodeInfo > Type
Definition: MeshFacadeIterators.h:232
friend class boost::iterator_core_access
Definition: MeshFacadeIterators.h:77
VirtualMeshType::Edge::array_type edgeIndices() const
Definition: MeshFacadeIterators.h:175
Definition: MeshFacadeIterators.h:57
Definition: MeshFacadeIterators.h:107
VirtualMeshType::Edge::iterator iterator
Definition: MeshFacadeIterators.h:104
Definition: MeshFacadeIterators.h:187
VirtualMeshType::Face::index_type index() const
Definition: MeshFacadeIterators.h:160
VirtualMeshType::Edge::index_type index() const
Definition: MeshFacadeIterators.h:116
EdgeInfo(VirtualMeshType *mesh)
Definition: MeshFacadeIterators.h:109
void setIndex(typename VirtualMeshType::Face::index_type i)
Definition: MeshFacadeIterators.h:158
Definition: MeshFacadeIterators.h:140
long long index_type
Definition: Types.h:39
FaceInfo(VirtualMeshType *mesh)
Definition: MeshFacadeIterators.h:154
VirtualMeshType::Node::array_type nodeIndices() const
Definition: MeshFacadeIterators.h:117
Definition: MeshFacadeIterators.h:146