traversability_generator3d
src
TravMapBfsVisitor.hpp
Go to the documentation of this file.
1
#pragma once
2
#include "
TravGenNode.hpp
"
3
#include <functional>
4
#include <unordered_set>
5
#include <unordered_map>
6
#include <deque>
7
8
namespace
traversability_generator3d
9
{
10
11
//FIXME should be moved to envire::maps ?!
12
14
class
TravMapBfsVisitor
15
{
16
public
:
17
21
static
void
visit
(
const
TravGenNode
*
start
, std::function<
void
(
const
TravGenNode
*
currentNode
,
22
bool
&
visitChildren
,
bool
&
abort
, std::size_t
distToRoot
)>
f
)
23
{
24
25
std::unordered_set<const TravGenNode*>
visited
;
26
std::deque<const TravGenNode*>
toVisit
;
27
std::unordered_map<const TravGenNode*, std::size_t>
distToRoot
;
28
toVisit
.push_back(
start
);
29
visited
.insert(
start
);
30
distToRoot
[
start
] = 0;
31
32
while
(
toVisit
.size() > 0)
33
{
34
const
TravGenNode
*
currentNode
=
toVisit
.front();
35
toVisit
.pop_front();
36
37
bool
visitChildren
=
true
;
38
bool
abort
=
false
;
39
f
(
currentNode
,
visitChildren
,
abort
,
distToRoot
[
currentNode
]);
40
41
if
(
abort
)
42
return
;
43
44
if
(
visitChildren
)
45
{
46
for
(
const
maps::grid::TraversabilityNodeBase*
node
:
currentNode
->getConnections())
47
{
48
const
TravGenNode
*
travNode
=
static_cast<
const
TravGenNode
*
>
(
node
);
49
assert
(
travNode
!=
nullptr
);
50
if
(
visited
.find(
travNode
) !=
visited
.end())
51
continue
;
52
visited
.insert(
travNode
);
//if we mark it as visited after the visit it might be visited multiple times
53
toVisit
.push_back(
travNode
);
54
distToRoot
[
travNode
] =
distToRoot
[
currentNode
] + 1;
55
}
56
}
57
}
58
}
59
};
60
61
62
}
TravGenNode.hpp
Polyhedron_3
CGAL::Polyhedron_3< K > Polyhedron_3
Definition
TraversabilityGenerator3d.hpp:27
traversability_generator3d::TravMapBfsVisitor
Definition
TravMapBfsVisitor.hpp:15
traversability_generator3d::TravMapBfsVisitor::visit
static void visit(const TravGenNode *start, std::function< void(const TravGenNode *currentNode, bool &visitChildren, bool &abort, std::size_t distToRoot)> f)
Definition
TravMapBfsVisitor.hpp:21
traversability_generator3d
Definition
SoilNode.hpp:9
traversability_generator3d::TravGenNode
maps::grid::TraversabilityNode< TravGenTrackingData > TravGenNode
Definition
TravGenNode.hpp:108
Generated by
1.9.8