osrm-backend/include/extractor/traffic_signals.hpp

41 lines
1.1 KiB
C++
Raw Normal View History

#ifndef OSRM_EXTRACTOR_TRAFFIC_SIGNALS_HPP
#define OSRM_EXTRACTOR_TRAFFIC_SIGNALS_HPP
#include "util/std_hash.hpp"
#include "util/typedefs.hpp"
2022-10-30 06:43:28 -04:00
#include <unordered_set>
#include <utility>
namespace osrm::extractor
{
struct TrafficSignals
{
std::unordered_set<NodeID> bidirectional_nodes;
std::unordered_set<std::pair<NodeID, NodeID>> unidirectional_segments;
inline bool HasSignal(NodeID from, NodeID to) const
{
return bidirectional_nodes.contains(to) || unidirectional_segments.contains({from, to});
}
void Compress(NodeID from, NodeID via, NodeID to)
{
bidirectional_nodes.erase(via);
if (unidirectional_segments.contains({via, to}))
{
unidirectional_segments.erase({via, to});
unidirectional_segments.insert({from, to});
}
if (unidirectional_segments.contains({via, from}))
{
unidirectional_segments.erase({via, from});
unidirectional_segments.insert({to, from});
}
}
};
2022-12-20 12:00:11 -05:00
} // namespace osrm::extractor
#endif // OSRM_EXTRACTOR_TRAFFIC_SIGNALS_HPP