#ifndef QUERYEDGE_HPP #define QUERYEDGE_HPP #include "util/typedefs.hpp" #include namespace osrm { namespace contractor { struct QueryEdge { NodeID source; NodeID target; struct EdgeData { EdgeData() : id(0), shortcut(false), distance(0), forward(false), backward(false) {} template EdgeData(const OtherT &other) { distance = other.distance; shortcut = other.shortcut; id = other.id; forward = other.forward; backward = other.backward; } NodeID id : 31; bool shortcut : 1; int distance : 30; bool forward : 1; bool backward : 1; } data; QueryEdge() : source(SPECIAL_NODEID), target(SPECIAL_NODEID) {} QueryEdge(NodeID source, NodeID target, EdgeData data) : source(source), target(target), data(std::move(data)) { } bool operator<(const QueryEdge &rhs) const { return std::tie(source, target) < std::tie(rhs.source, rhs.target); } bool operator==(const QueryEdge &right) const { return (source == right.source && target == right.target && data.distance == right.data.distance && data.shortcut == right.data.shortcut && data.forward == right.data.forward && data.backward == right.data.backward && data.id == right.data.id); } }; } } #endif // QUERYEDGE_HPP