56 #include <OpenMesh/Core/Mesh/Status.hh> 81 template <
class Mesh,
class ValueHandle,
class MemberOwner,
bool (MemberOwner::*PrimitiveStatusMember)() const,
size_t (MemberOwner::*PrimitiveCountMember)() const>
86 typedef ValueHandle value_handle;
87 typedef value_handle value_type;
88 typedef std::bidirectional_iterator_tag iterator_category;
89 typedef std::ptrdiff_t difference_type;
94 typedef const SmartHandle*
pointer;
98 : hnd_(
make_smart(ValueHandle(),nullptr)), skip_bits_(0)
103 : hnd_(
make_smart(_hnd, _mesh)), skip_bits_(0)
123 OM_DEPRECATED(
"This function clutters your code. Use dereferencing operators -> and * instead.")
134 OM_DEPRECATED(
"Implicit casts of iterators are unsafe. Use dereferencing operators -> and * instead.")
135 operator value_handle()
const {
141 return ((hnd_.mesh() == _rhs.hnd_.mesh()) && (hnd_ == _rhs.hnd_));
164 #if ((defined(_MSC_VER) && (_MSC_VER >= 1800)) || __cplusplus > 199711L || defined(__GXX_EXPERIMENTAL_CXX0X__)) && !defined(OPENMESH_VECTOR_LEGACY) 165 template<
class T = value_handle>
166 auto operator+=(
int amount) ->
167 typename std::enable_if<
168 sizeof(decltype(std::declval<T>().__increment(amount))) >= 0,
170 static_assert(std::is_same<T, value_handle>::value,
171 "Template parameter must not deviate from default.");
173 throw std::logic_error(
"Skipping iterators do not support " 175 hnd_.__increment(amount);
179 template<
class T = value_handle>
180 auto operator+(
int rhs) ->
181 typename std::enable_if<
182 sizeof(decltype(std::declval<T>().__increment(rhs),
void (),
int {})) >= 0,
184 static_assert(std::is_same<T, value_handle>::value,
185 "Template parameter must not deviate from default.");
187 throw std::logic_error(
"Skipping iterators do not support " 190 result.hnd_.__increment(rhs);
212 if (hnd_.mesh() && (hnd_.mesh()->*PrimitiveStatusMember)()) {
216 skip_bits_ = status.
bits();
230 assert(hnd_.mesh() && skip_bits_);
231 while ((hnd_.idx() < (signed) (hnd_.mesh()->*PrimitiveCountMember)())
232 && (hnd_.mesh()->status(hnd_).bits() & skip_bits_))
237 assert(hnd_.mesh() && skip_bits_);
238 while ((hnd_.idx() >= 0) && (hnd_.mesh()->status(hnd_).bits() & skip_bits_))
244 unsigned int skip_bits_;
GenericIteratorT & operator--()
Standard pre-decrement operator.
bool operator==(const GenericIteratorT &_rhs) const
Are two iterators equal? Only valid if they refer to the same mesh!
bool operator!=(const GenericIteratorT &_rhs) const
Not equal?
value_handle handle() const
Get the handle of the item the iterator refers to.
pointer operator->() const
Standard pointer operator.
SmartVertexHandle make_smart(VertexHandle _vh, const PolyConnectivity *_mesh)
Creats a SmartVertexHandle from a VertexHandle and a Mesh.
void disable_skipping()
Turn on skipping: automatically skip deleted/hidden elements.
void set_hidden(bool _b)
set hidden
#define OM_DEPRECATED(msg)
define OM_SUPPRESS_DEPRECATED to suppress deprecated code warnings
void set_deleted(bool _b)
set deleted
unsigned int bits() const
return whole status
GenericIteratorT operator--(int)
Standard post-decrement operator.
void enable_skipping()
Turn on skipping: automatically skip deleted/hidden elements.
GenericIteratorT operator++(int)
Standard post-increment operator.
GenericIteratorT(mesh_ref _mesh, value_handle _hnd, bool _skip=false)
Construct with mesh and a target handle.
GenericIteratorT()
Default constructor.
reference operator*() const
Standard dereferencing operator.
GenericIteratorT & operator++()
Standard pre-increment operator.