Added structures for RestrictionTarget and RestrictionSource.
This commit is contained in:
parent
65ccbedab2
commit
2d9645b9b0
@ -39,8 +39,63 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#include <unordered_map>
|
||||
#include <unordered_set>
|
||||
|
||||
// Efficent look up if an edge is the start + via node of a TurnRestriction
|
||||
// EdgeBasedEdgeFactory decides by it if edges are inserted or geometry is compressed
|
||||
|
||||
struct RestrictionSource//: public std::pair<NodeID, NodeID>
|
||||
{
|
||||
NodeID start;
|
||||
NodeID via;
|
||||
|
||||
RestrictionSource(NodeID _start, NodeID _via)//:std::pair<NodeID, NodeID>(from, via) {}
|
||||
: start(_start), via(_via) {}
|
||||
inline NodeID StartNode() const { return start; }
|
||||
inline NodeID ViaNode() const { return via; }
|
||||
|
||||
friend inline bool operator==(const RestrictionSource& lhs, const RestrictionSource& rhs)
|
||||
{
|
||||
return (lhs.start == rhs.start && lhs.via == rhs.via);
|
||||
}
|
||||
};
|
||||
|
||||
struct RestrictionTarget//: public std::pair<NodeID, bool>
|
||||
{
|
||||
NodeID target;
|
||||
bool is_only;
|
||||
|
||||
RestrictionTarget(NodeID _target, bool _only)//:std::pair<NodeID, bool>(to, _only) {}
|
||||
: target(_target), is_only(_only) {}
|
||||
inline NodeID TargetNode() const { return target; }
|
||||
inline NodeID IsOnly() const { return is_only; } //!< an only_-restriction
|
||||
inline void SetTarget(NodeID _target) { target = _target; } //!< an only_-restriction
|
||||
|
||||
friend inline bool operator==(const RestrictionTarget& lhs, const RestrictionTarget& rhs)
|
||||
{
|
||||
return (lhs.target == rhs.target && lhs.is_only == rhs.is_only);
|
||||
}
|
||||
};
|
||||
|
||||
namespace std
|
||||
{
|
||||
template <> struct hash<RestrictionSource>
|
||||
{
|
||||
size_t operator()(const RestrictionSource &r_source) const
|
||||
{
|
||||
return std::hash<int>()(r_source.StartNode()) ^ std::hash<int>()(r_source.ViaNode());
|
||||
}
|
||||
};
|
||||
|
||||
template <> struct hash<RestrictionTarget>
|
||||
{
|
||||
size_t operator()(const RestrictionTarget &r_target) const
|
||||
{
|
||||
return std::hash<int>()(r_target.TargetNode()) ^ std::hash<bool>()(r_target.IsOnly());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
\brief Efficent look up if an edge is the start + via node of a TurnRestriction
|
||||
EdgeBasedEdgeFactory decides by it if edges are inserted or geometry is compressed
|
||||
*/
|
||||
class RestrictionMap
|
||||
{
|
||||
public:
|
||||
|
Loading…
Reference in New Issue
Block a user