MeshLib C++ Docs
Loading...
Searching...
No Matches
MRPolylineEdgeIterator.h
Go to the documentation of this file.
1#pragma once
2
4#include "MRIteratorRange.h"
5#include <iterator>
6
7namespace MR
8{
9
12class PolylineUndirectedEdgeIterator
13{
14public:
15 using iterator_category = std::forward_iterator_tag;
16 using value_type = UndirectedEdgeId;
17
18 // creates begin iterator
19 PolylineUndirectedEdgeIterator( const PolylineTopology & topology ) : topology_( &topology )
20 {
21 if ( topology_->undirectedEdgeSize() == 0 )
22 return; // end has reached
23 edge_ = UndirectedEdgeId{0};
24 if ( topology_->isLoneEdge( edge_ ) )
25 operator ++();
26 }
27 // creates end iterator
29
30 PolylineUndirectedEdgeIterator & operator++( )
31 {
32 assert( edge_.valid() );
33 for (;;)
34 {
35 ++edge_;
36 if ( edge_ >= topology_->undirectedEdgeSize() )
37 {
38 edge_ = UndirectedEdgeId{};
39 break;
40 }
41 if ( !topology_->isLoneEdge( edge_ ) )
42 break;
43 }
44 return * this;
45 }
46 UndirectedEdgeId operator *( ) const { return edge_; }
47
48private:
49 const PolylineTopology * topology_ = nullptr;
50 UndirectedEdgeId edge_;
51};
52
55
56inline bool operator ==( const PolylineUndirectedEdgeIterator & a, const PolylineUndirectedEdgeIterator & b )
57 { return *a == *b; }
58
59inline bool operator !=( const PolylineUndirectedEdgeIterator & a, const PolylineUndirectedEdgeIterator & b )
60 { return *a != *b; }
61
62inline IteratorRange<PolylineUndirectedEdgeIterator> undirectedEdges( const PolylineTopology & topology )
63 { return { PolylineUndirectedEdgeIterator( topology ), PolylineUndirectedEdgeIterator() }; }
64
66
67} // namespace MR
MRMESH_API bool operator==(const BitSet &a, const BitSet &b)
compare that two bit sets have the same set bits (they can be equal even if sizes are distinct but la...
Definition MRCameraOrientationPlugin.h:8
bool operator!=(const Color &a, const Color &b)
Definition MRMesh/MRColor.h:101
IteratorRange< UndirectedEdgeIterator > undirectedEdges(const MeshTopology &topology)
Definition MREdgeIterator.h:58
readonly unsafe bool valid()