GCC Code Coverage Report


Directory: ./
File: include/hpp/manipulation/roadmap.hh
Date: 2025-03-07 11:10:46
Exec Total Coverage
Lines: 0 4 0.0%
Branches: 0 2 0.0%

Line Branch Exec Source
1 // Copyright (c) 2014, LAAS-CNRS
2 // Authors: Joseph Mirabel (joseph.mirabel@laas.fr)
3 //
4
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 // 1. Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 //
12 // 2. Redistributions in binary form must reproduce the above copyright
13 // notice, this list of conditions and the following disclaimer in the
14 // documentation and/or other materials provided with the distribution.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
27 // DAMAGE.
28
29 #ifndef HPP_MANIPULATION_ROADMAP_HH
30 #define HPP_MANIPULATION_ROADMAP_HH
31
32 #include <hpp/core/roadmap.hh>
33 #include <hpp/manipulation/deprecated.hh>
34 #include <hpp/manipulation/leaf-connected-comp.hh>
35
36 #include "hpp/manipulation/config.hh"
37 #include "hpp/manipulation/fwd.hh"
38 #include "hpp/manipulation/graph/fwd.hh"
39
40 namespace hpp {
41 namespace manipulation {
42 /// \addtogroup roadmap
43 /// \{
44
45 /// Extension of hpp::core::Roadmap. It adds the ability of doing
46 /// statistics on the graph
47 class HPP_MANIPULATION_DLLAPI Roadmap : public core::Roadmap {
48 public:
49 typedef core::Roadmap Parent;
50
51 /// Return a shared pointer to a new instance
52 static RoadmapPtr_t create(const core::DistancePtr_t& distance,
53 const core::DevicePtr_t& robot);
54
55 /// Register histogram so that each time a node is added to the roadmap,
56 /// it is also added to the histogram
57 void insertHistogram(const graph::HistogramPtr_t hist);
58
59 /// Register the constraint graph to do statistics.
60 void constraintGraph(const graph::GraphPtr_t& graph);
61
62 /// Clear the histograms and call parent implementation.
63 void clear();
64
65 /// Catch event 'New node added'
66 void push_node(const core::NodePtr_t& n);
67
68 /// Get the nearest neighbor in a given graph::Node and in a given
69 /// ConnectedComponent.
70 RoadmapNodePtr_t nearestNodeInState(
71 ConfigurationIn_t configuration,
72 const ConnectedComponentPtr_t& connectedComponent,
73 const graph::StatePtr_t& state, value_type& minDistance) const;
74
75 /// Update the graph of connected components after new connection
76 /// \param cc1, cc2 the two connected components that have just been
77 /// connected.
78 void connect(const LeafConnectedCompPtr_t& cc1,
79 const LeafConnectedCompPtr_t& cc2);
80
81 /// Merge two connected components
82 /// \param cc1 the connected component to merge into
83 /// \param the connected components to merge into cc1.
84 void merge(const LeafConnectedCompPtr_t& cc1,
85 LeafConnectedComp::LeafConnectedComps_t& ccs);
86
87 /// Get graph state corresponding to given roadmap node
88 graph::StatePtr_t getState(RoadmapNodePtr_t node);
89
90 /// Get leaf connected components
91 ///
92 /// Leaf connected components are composed of nodes
93 /// \li belonging to the same connected component of the roadmap and,
94 /// \li lying in the same leaf of a transition.
95 const LeafConnectedComps_t& leafConnectedComponents() const {
96 return leafCCs_;
97 }
98
99 protected:
100 /// Register a new configuration.
101 void statInsert(const RoadmapNodePtr_t& n);
102
103 /// Constructor
104 Roadmap(const core::DistancePtr_t& distance, const core::DevicePtr_t& robot);
105
106 /// Node factory
107 core::NodePtr_t createNode(ConfigurationIn_t config) const;
108
109 void init(const RoadmapPtr_t& shPtr) {
110 Parent::init(shPtr);
111 weak_ = shPtr;
112 }
113
114 virtual void impl_addEdge(const core::EdgePtr_t& edge);
115
116 private:
117 typedef graph::Histograms_t Histograms_t;
118 /// Keep track of the leaf that are explored.
119 /// There should be one histogram per foliation.
120 Histograms_t histograms_;
121 graph::GraphPtr_t graph_;
122 RoadmapWkPtr_t weak_;
123 LeafConnectedComps_t leafCCs_;
124
125 Roadmap() {}
126 HPP_SERIALIZABLE();
127 };
128 /// \}
129 } // namespace manipulation
130 } // namespace hpp
131
132 #endif // HPP_MANIPULATION_ROADMAP_HH
133