DGtal
2.2.0
Toggle main menu visibility
Loading...
Searching...
No Matches
GraphVisitorRange.h
1
16
17
#pragma once
18
30
31
#if defined(GraphVisitorRange_RECURSES)
32
#error Recursive header files inclusion detected in GraphVisitorRange.h
33
#else
// defined(GraphVisitorRange_RECURSES)
35
#define GraphVisitorRange_RECURSES
36
37
#if !defined GraphVisitorRange_h
39
#define GraphVisitorRange_h
40
42
// Inclusions
43
#include <iostream>
44
#include "DGtal/base/Common.h"
45
#include "DGtal/base/CountedPtr.h"
47
48
namespace
DGtal
49
{
50
52
// template class GraphVisitorRange
70
template
<
typename
TGraphVisitor >
71
class
GraphVisitorRange
72
{
73
public
:
74
typedef
TGraphVisitor
GraphVisitor
;
75
typedef
typename
GraphVisitor::Graph
Graph
;
76
typedef
typename
GraphVisitor::Vertex
Vertex
;
77
typedef
typename
GraphVisitor::Node
Node
;
78
typedef
typename
GraphVisitor::Size
Size
;
79
typedef
typename
GraphVisitor::Data
Data
;
80
85
struct
NodeAccessor
{
86
typedef
const
Node
value
;
87
typedef
const
Node
value_type
;
88
typedef
const
Node
*
pointer
;
89
typedef
const
Node
&
reference
;
90
inline
91
static
reference
get
(
const
Node
& node )
92
{
return
node; }
93
};
94
99
struct
VertexAccessor
{
100
typedef
const
Vertex
value
;
101
typedef
const
Vertex
value_type
;
102
typedef
const
Vertex
*
pointer
;
103
typedef
const
Vertex
&
reference
;
104
inline
105
static
reference
get
(
const
Node
& node )
106
{
return
node.first; }
107
};
108
116
template
<
typename
TAccessor>
117
struct
GenericConstIterator
118
{
119
typedef
GenericConstIterator<TAccessor>
Self
;
120
typedef
TAccessor
Accessor
;
121
122
// stl iterator types.
123
typedef
std::input_iterator_tag
iterator_category
;
124
typedef
typename
Accessor::value
value_type
;
125
typedef
std::ptrdiff_t
difference_type
;
126
typedef
typename
Accessor::pointer
pointer
;
127
typedef
typename
Accessor::reference
reference
;
128
130
CountedPtr< GraphVisitor >
myVisitor
;
131
132
inline
133
GenericConstIterator
()
134
:
myVisitor
( 0 ) {}
135
inline
136
GenericConstIterator
(
CountedPtr<GraphVisitor>
ptrV )
137
:
myVisitor
( ptrV ) {}
138
inline
139
GenericConstIterator
(
const
Self
& other )
140
:
myVisitor
( other.
myVisitor
) {}
141
142
inline
143
Self
&
operator=
(
const
Self
& other )
144
{
145
if
(
this
!= &other )
146
myVisitor
= other.
myVisitor
;
147
return
*
this
;
148
}
149
150
inline
151
reference
152
operator*
()
const
153
{
154
ASSERT( (
myVisitor
.
get
() != 0 )
155
&&
"DGtal::GraphVisitorRange<>::GenericConstIterator<>::operator*(): you cannot dereferenced a null visitor (i.e. end())."
);
156
return
Accessor::get
(
myVisitor
->current() );
157
}
158
159
inline
160
pointer
161
operator->
()
const
162
{
163
ASSERT( (
myVisitor
.
get
() != 0 )
164
&&
"DGtal::GraphVisitorRange<>::GenericConstIterator<>::operator->(): you cannot dereferenced a null visitor (i.e. end())."
);
165
return
&
Accessor::get
(
operator
*() );
166
}
167
168
inline
169
Self
&
170
operator++
()
171
{
172
myVisitor
->expand();
173
return
*
this
;
174
}
175
176
inline
177
Self
178
operator++
(
int
)
179
{
180
Self
__tmp = *
this
;
181
myVisitor
->expand();
182
return
__tmp;
183
}
184
185
inline
186
bool
operator==
(
const
Self
& other )
const
187
{
188
if
( (
myVisitor
.
get
() == 0 ) ||
myVisitor
->finished() )
189
return
( other.
myVisitor
.
get
() == 0 ) || other.
myVisitor
->finished();
190
else
if
( other.
myVisitor
.
get
() == 0 )
191
return
false
;
192
else
193
return
&(
myVisitor
->current()) == &(other.
myVisitor
->current());
194
}
195
196
inline
197
bool
operator!=
(
const
Self
& other )
const
198
{
199
return
! ( this->
operator==
( other ) );
200
}
201
};
202
205
typedef
GenericConstIterator<VertexAccessor>
VertexConstIterator
;
208
typedef
GenericConstIterator<NodeAccessor>
NodeConstIterator
;
209
210
typedef
VertexConstIterator
ConstIterator
;
211
typedef
ConstIterator
const_iterator
;
212
213
// ----------------------- Standard services ------------------------------
214
public
:
215
219
~GraphVisitorRange
();
220
229
GraphVisitorRange
(
GraphVisitor
* visitorPtr );
230
237
ConstIterator
begin
()
const
;
238
243
ConstIterator
end
()
const
;
244
251
NodeConstIterator
beginNode
()
const
;
252
257
NodeConstIterator
endNode
()
const
;
258
259
// ----------------------- Interface --------------------------------------
260
public
:
261
266
void
selfDisplay
( std::ostream & out )
const
;
267
272
bool
isValid
()
const
;
273
274
// ------------------------- Protected Data ------------------------------
275
private
:
276
// ------------------------- Private Data --------------------------------
277
private
:
278
280
CountedPtr<GraphVisitor>
myVisitor
;
281
282
// ------------------------- Hidden services ------------------------------
283
protected
:
284
289
GraphVisitorRange
();
290
291
private
:
292
298
GraphVisitorRange
(
const
GraphVisitorRange
& other );
299
306
GraphVisitorRange
&
operator=
(
const
GraphVisitorRange
& other );
307
308
// ------------------------- Internals ------------------------------------
309
private
:
310
311
};
// end of class GraphVisitorRange
312
313
320
template
<
typename
TGraphVisitor>
321
std::ostream&
322
operator<<
( std::ostream & out,
const
GraphVisitorRange<TGraphVisitor>
&
object
);
323
324
}
// namespace DGtal
325
326
328
// Includes inline functions.
329
#include "DGtal/graph/GraphVisitorRange.ih"
330
331
// //
333
334
#endif
// !defined GraphVisitorRange_h
335
336
#undef GraphVisitorRange_RECURSES
337
#endif
// else defined(GraphVisitorRange_RECURSES)
DGtal::BreadthFirstVisitor< MyDigitalSurface >::Data
Size Data
Definition
BreadthFirstVisitor.h:103
DGtal::BreadthFirstVisitor< MyDigitalSurface >::Size
Graph::Size Size
Definition
BreadthFirstVisitor.h:101
DGtal::BreadthFirstVisitor< MyDigitalSurface >::Vertex
Graph::Vertex Vertex
Definition
BreadthFirstVisitor.h:102
DGtal::BreadthFirstVisitor< MyDigitalSurface >::Node
std::pair< Vertex, Data > Node
Definition
BreadthFirstVisitor.h:115
DGtal::BreadthFirstVisitor< MyDigitalSurface >::Graph
MyDigitalSurface Graph
Definition
BreadthFirstVisitor.h:99
DGtal::CountedPtr< GraphVisitor >
DGtal::CountedPtr::get
T * get() const noexcept
Definition
CountedPtr.h:195
DGtal::GraphVisitorRange
Aim: Transforms a graph visitor into a single pass input range.
Definition
GraphVisitorRange.h:72
DGtal::GraphVisitorRange< Visitor >::ConstIterator
VertexConstIterator ConstIterator
Definition
GraphVisitorRange.h:210
DGtal::GraphVisitorRange::GraphVisitorRange
GraphVisitorRange(const GraphVisitorRange &other)
DGtal::GraphVisitorRange< Visitor >::VertexConstIterator
GenericConstIterator< VertexAccessor > VertexConstIterator
Definition
GraphVisitorRange.h:205
DGtal::GraphVisitorRange::begin
ConstIterator begin() const
DGtal::GraphVisitorRange::operator=
GraphVisitorRange & operator=(const GraphVisitorRange &other)
DGtal::GraphVisitorRange< Visitor >::myVisitor
CountedPtr< GraphVisitor > myVisitor
Definition
GraphVisitorRange.h:280
DGtal::GraphVisitorRange< Visitor >::Vertex
GraphVisitor::Vertex Vertex
Definition
GraphVisitorRange.h:76
DGtal::GraphVisitorRange::beginNode
NodeConstIterator beginNode() const
DGtal::GraphVisitorRange::GraphVisitorRange
GraphVisitorRange(GraphVisitor *visitorPtr)
DGtal::GraphVisitorRange::endNode
NodeConstIterator endNode() const
DGtal::GraphVisitorRange::~GraphVisitorRange
~GraphVisitorRange()
DGtal::GraphVisitorRange< Visitor >::Node
GraphVisitor::Node Node
Definition
GraphVisitorRange.h:77
DGtal::GraphVisitorRange< Visitor >::Size
GraphVisitor::Size Size
Definition
GraphVisitorRange.h:78
DGtal::GraphVisitorRange< Visitor >::GraphVisitor
Visitor GraphVisitor
Definition
GraphVisitorRange.h:74
DGtal::GraphVisitorRange< Visitor >::const_iterator
ConstIterator const_iterator
Definition
GraphVisitorRange.h:211
DGtal::GraphVisitorRange::isValid
bool isValid() const
DGtal::GraphVisitorRange::selfDisplay
void selfDisplay(std::ostream &out) const
DGtal::GraphVisitorRange< Visitor >::Graph
GraphVisitor::Graph Graph
Definition
GraphVisitorRange.h:75
DGtal::GraphVisitorRange::GraphVisitorRange
GraphVisitorRange()
DGtal::GraphVisitorRange< Visitor >::NodeConstIterator
GenericConstIterator< NodeAccessor > NodeConstIterator
Definition
GraphVisitorRange.h:208
DGtal::GraphVisitorRange::end
ConstIterator end() const
DGtal::GraphVisitorRange< Visitor >::Data
GraphVisitor::Data Data
Definition
GraphVisitorRange.h:79
DGtal
DGtal is the top-level namespace which contains all DGtal functions and types.
Definition
ClosedIntegerHalfPlane.h:49
DGtal::operator<<
std::ostream & operator<<(std::ostream &out, const ClosedIntegerHalfPlane< TSpace > &object)
DGtal::GraphVisitorRange::GenericConstIterator::pointer
Accessor::pointer pointer
Definition
GraphVisitorRange.h:126
DGtal::GraphVisitorRange::GenericConstIterator::GenericConstIterator
GenericConstIterator(const Self &other)
Definition
GraphVisitorRange.h:139
DGtal::GraphVisitorRange::GenericConstIterator::operator++
Self operator++(int)
Definition
GraphVisitorRange.h:178
DGtal::GraphVisitorRange::GenericConstIterator::value_type
Accessor::value value_type
Definition
GraphVisitorRange.h:124
DGtal::GraphVisitorRange::GenericConstIterator::operator==
bool operator==(const Self &other) const
Definition
GraphVisitorRange.h:186
DGtal::GraphVisitorRange::GenericConstIterator::operator++
Self & operator++()
Definition
GraphVisitorRange.h:170
DGtal::GraphVisitorRange::GenericConstIterator::Accessor
TAccessor Accessor
Definition
GraphVisitorRange.h:120
DGtal::GraphVisitorRange::GenericConstIterator::operator!=
bool operator!=(const Self &other) const
Definition
GraphVisitorRange.h:197
DGtal::GraphVisitorRange::GenericConstIterator::operator->
pointer operator->() const
Definition
GraphVisitorRange.h:161
DGtal::GraphVisitorRange::GenericConstIterator::iterator_category
std::input_iterator_tag iterator_category
Definition
GraphVisitorRange.h:123
DGtal::GraphVisitorRange::GenericConstIterator::difference_type
std::ptrdiff_t difference_type
Definition
GraphVisitorRange.h:125
DGtal::GraphVisitorRange::GenericConstIterator::operator*
reference operator*() const
Definition
GraphVisitorRange.h:152
DGtal::GraphVisitorRange::GenericConstIterator::GenericConstIterator
GenericConstIterator()
Definition
GraphVisitorRange.h:133
DGtal::GraphVisitorRange::GenericConstIterator< VertexAccessor >::myVisitor
CountedPtr< GraphVisitor > myVisitor
Definition
GraphVisitorRange.h:130
DGtal::GraphVisitorRange::GenericConstIterator::Self
GenericConstIterator< TAccessor > Self
Definition
GraphVisitorRange.h:119
DGtal::GraphVisitorRange::GenericConstIterator::GenericConstIterator
GenericConstIterator(CountedPtr< GraphVisitor > ptrV)
Definition
GraphVisitorRange.h:136
DGtal::GraphVisitorRange::GenericConstIterator::operator=
Self & operator=(const Self &other)
Definition
GraphVisitorRange.h:143
DGtal::GraphVisitorRange::GenericConstIterator::reference
Accessor::reference reference
Definition
GraphVisitorRange.h:127
DGtal::GraphVisitorRange::NodeAccessor
Definition
GraphVisitorRange.h:85
DGtal::GraphVisitorRange::NodeAccessor::value
const Node value
Definition
GraphVisitorRange.h:86
DGtal::GraphVisitorRange::NodeAccessor::reference
const Node & reference
Definition
GraphVisitorRange.h:89
DGtal::GraphVisitorRange::NodeAccessor::get
static reference get(const Node &node)
Definition
GraphVisitorRange.h:91
DGtal::GraphVisitorRange::NodeAccessor::value_type
const Node value_type
Definition
GraphVisitorRange.h:87
DGtal::GraphVisitorRange::NodeAccessor::pointer
const Node * pointer
Definition
GraphVisitorRange.h:88
DGtal::GraphVisitorRange::VertexAccessor
Definition
GraphVisitorRange.h:99
DGtal::GraphVisitorRange::VertexAccessor::pointer
const Vertex * pointer
Definition
GraphVisitorRange.h:102
DGtal::GraphVisitorRange::VertexAccessor::value_type
const Vertex value_type
Definition
GraphVisitorRange.h:101
DGtal::GraphVisitorRange::VertexAccessor::value
const Vertex value
Definition
GraphVisitorRange.h:100
DGtal::GraphVisitorRange::VertexAccessor::get
static reference get(const Node &node)
Definition
GraphVisitorRange.h:105
DGtal::GraphVisitorRange::VertexAccessor::reference
const Vertex & reference
Definition
GraphVisitorRange.h:103
src
DGtal
graph
GraphVisitorRange.h
Generated on
for DGtal by
1.18.0