Fawkes API Fawkes Development Version
constraint_repo.h
1/***************************************************************************
2 * constraint_repo.h - navgraph constraint repository
3 *
4 * Created: Fr Mar 14 10:47:35 2014
5 * Copyright 2014 Sebastian Reuter
6 * 2014 Tim Niemueller
7 ****************************************************************************/
8
9/* This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU Library General Public License for more details.
18 *
19 * Read the full text in the LICENSE.GPL file in the doc directory.
20 */
21
22#ifndef _NAVGRAPH_CONSTRAINTS_CONSTRAINT_REPO_H_
23#define _NAVGRAPH_CONSTRAINTS_CONSTRAINT_REPO_H_
24
25#include <navgraph/constraints/edge_constraint.h>
26#include <navgraph/constraints/edge_cost_constraint.h>
27#include <navgraph/constraints/node_constraint.h>
28#include <navgraph/navgraph_edge.h>
29
30#include <list>
31#include <map>
32#include <tuple>
33#include <vector>
34
35namespace fawkes {
36
38{
39public:
40 /** List of navgraph node constraints. */
41 typedef std::vector<fawkes::NavGraphNodeConstraint *> NodeConstraintList;
42 /** List of navgraph edge constraints. */
43 typedef std::vector<fawkes::NavGraphEdgeConstraint *> EdgeConstraintList;
44 /** List of navgraph edge cost constraints. */
45 typedef std::vector<fawkes::NavGraphEdgeCostConstraint *> EdgeCostConstraintList;
46
49
53 void unregister_constraint(std::string name);
54
55 bool has_constraint(std::string &name);
59
63
64 bool has_constraints() const;
65
66 bool compute();
67
70
72 const fawkes::NavGraphNode &to);
73
75 const fawkes::NavGraphNode &to,
76 float & cost_factor);
77
78 float cost_factor(const fawkes::NavGraphNode &from, const fawkes::NavGraphNode &to);
79
80 std::map<std::string, std::string> blocks(const std::vector<fawkes::NavGraphNode> &nodes);
81
82 std::map<std::pair<std::string, std::string>, std::string>
83 blocks(const std::vector<fawkes::NavGraphEdge> &edges);
84
85 std::list<std::tuple<std::string, std::string, std::string, float>>
86 cost_factor(const std::vector<fawkes::NavGraphEdge> &edges);
87
88 bool modified(bool reset_modified = false);
89
90private:
91 NodeConstraintList node_constraints_;
92 EdgeConstraintList edge_constraints_;
93 EdgeCostConstraintList edge_cost_constraints_;
94 bool modified_;
95};
96} // namespace fawkes
97
98#endif
Constraint repository to maintain blocks on nodes.
std::vector< fawkes::NavGraphEdgeCostConstraint * > EdgeCostConstraintList
List of navgraph edge cost constraints.
fawkes::NavGraphNodeConstraint * get_node_constraint(std::string &name)
Get a node constraint by name.
fawkes::NavGraphEdgeConstraint * get_edge_constraint(std::string &name)
Get an edge constraint by name.
const EdgeConstraintList & edge_constraints() const
Get a list of registered edge constraints.
std::vector< fawkes::NavGraphNodeConstraint * > NodeConstraintList
List of navgraph node constraints.
std::vector< fawkes::NavGraphEdgeConstraint * > EdgeConstraintList
List of navgraph edge constraints.
void register_constraint(NavGraphNodeConstraint *constraint)
Register a constraint.
bool has_constraints() const
Check if there are any constraints at all.
void unregister_constraint(std::string name)
Unregister a constraint by name.
NavGraphEdgeCostConstraint * increases_cost(const fawkes::NavGraphNode &from, const fawkes::NavGraphNode &to)
Check if any constraint in the repo increases the cost of the edge.
fawkes::NavGraphEdgeCostConstraint * get_edge_cost_constraint(std::string &name)
Get an edge cost constraint by name.
bool modified(bool reset_modified=false)
Check if the constraint repo has been modified.
const NodeConstraintList & node_constraints() const
Get a list of registered node constraints.
float cost_factor(const fawkes::NavGraphNode &from, const fawkes::NavGraphNode &to)
Get the highest increasing cost factor for an edge.
NavGraphNodeConstraint * blocks(const fawkes::NavGraphNode &node)
Check if any constraint in the repo blocks the node.
bool compute()
Call compute method on all registered constraints.
const EdgeCostConstraintList & edge_cost_constraints() const
Get a list of registered edge cost constraints.
bool has_constraint(std::string &name)
Check by name if a constraint has been registered.
Constraint that can be queried to check if an edge is blocked.
Constraint that can be queried for an edge cost factor.
Constraint that can be queried to check if a node is blocked.
Topological graph node.
Definition: navgraph_node.h:36
Fawkes library namespace.