mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 13:03:36 +00:00
[generator] Implement hash for OsmElement::Tag
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
This commit is contained in:
@@ -7,6 +7,8 @@
|
||||
#include "base/stl_helpers.hpp"
|
||||
#include "base/string_utils.hpp"
|
||||
|
||||
#include "3party/ankerl/unordered_dense.h"
|
||||
|
||||
#include <sstream>
|
||||
|
||||
std::string DebugPrint(OsmElement::EntityType type)
|
||||
|
||||
@@ -146,3 +146,13 @@ std::string DebugPrintID(OsmElement const & element);
|
||||
std::string DebugPrint(OsmElement const & element);
|
||||
std::string DebugPrint(OsmElement::EntityType type);
|
||||
std::string DebugPrint(OsmElement::Tag const & tag);
|
||||
|
||||
template <>
|
||||
struct std::hash<OsmElement::Tag>
|
||||
{
|
||||
using is_avalanching = void;
|
||||
auto operator()(OsmElement::Tag const & tag) const noexcept -> std::uint64_t {
|
||||
std::string const str = tag.m_key + tag.m_value;
|
||||
return ankerl::unordered_dense::detail::wyhash::hash(str.data(), sizeof(char) * str.size());
|
||||
}
|
||||
};
|
||||
|
||||
@@ -45,7 +45,8 @@ vector<string> const kBycicleAccessConditionalTags = {"bicycle:conditional"};
|
||||
// Some tags assume access:conditional in fact, but doesn't have it.
|
||||
// For example if road is tagged as "winter_road = yes",
|
||||
// for routing it is like: "access:conditional = no @ (Feb - Dec)"
|
||||
std::map<OsmElement::Tag, string> kTagToAccessConditional = {
|
||||
// TODO: handle Southern Hemisphere
|
||||
std::pair<OsmElement::Tag, string> const kTagToAccessConditional[] = {
|
||||
{OsmElement::Tag("winter_road", "yes"), "no @ (Mar - Nov)"},
|
||||
{OsmElement::Tag("ice_road", "yes"), "no @ (Mar - Nov)"}};
|
||||
|
||||
|
||||
@@ -9,13 +9,14 @@
|
||||
#include "routing/vehicle_mask.hpp"
|
||||
|
||||
#include <array>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "3party/ankerl/unordered_dense.h"
|
||||
|
||||
namespace routing
|
||||
{
|
||||
class OsmWay2FeaturePoint;
|
||||
@@ -92,7 +93,7 @@ void Load(Source & src, ConditionalRAVectorT & vec)
|
||||
class RoadAccessTagProcessor
|
||||
{
|
||||
public:
|
||||
using TagMapping = std::map<OsmElement::Tag, RoadAccess::Type>;
|
||||
using TagMapping = ankerl::unordered_dense::map<OsmElement::Tag, RoadAccess::Type>;
|
||||
using ConditionalTagsList = std::vector<std::string>;
|
||||
|
||||
explicit RoadAccessTagProcessor(VehicleType vehicleType);
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
|
||||
#include <optional>
|
||||
|
||||
#include "3party/ankerl/unordered_dense.h"
|
||||
|
||||
namespace routing_builder
|
||||
{
|
||||
using namespace feature;
|
||||
@@ -31,7 +33,7 @@ using std::string, std::vector;
|
||||
namespace
|
||||
{
|
||||
// Unified penalty mapping for all OSM tags that create road penalties
|
||||
std::map<OsmElement::Tag, RoadPenalty::Type> const kUnifiedPenaltyMapping = {
|
||||
ankerl::unordered_dense::map<OsmElement::Tag, RoadPenalty::Type> const kUnifiedPenaltyMapping = {
|
||||
// Traffic calming measures
|
||||
|
||||
{OsmElement::Tag("traffic_calming", "rumble_strip"), RoadPenalty::Type::SmallCalming},
|
||||
|
||||
Reference in New Issue
Block a user