mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-20 13:23:59 +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/stl_helpers.hpp"
|
||||||
#include "base/string_utils.hpp"
|
#include "base/string_utils.hpp"
|
||||||
|
|
||||||
|
#include "3party/ankerl/unordered_dense.h"
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
std::string DebugPrint(OsmElement::EntityType type)
|
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 const & element);
|
||||||
std::string DebugPrint(OsmElement::EntityType type);
|
std::string DebugPrint(OsmElement::EntityType type);
|
||||||
std::string DebugPrint(OsmElement::Tag const & tag);
|
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.
|
// Some tags assume access:conditional in fact, but doesn't have it.
|
||||||
// For example if road is tagged as "winter_road = yes",
|
// For example if road is tagged as "winter_road = yes",
|
||||||
// for routing it is like: "access:conditional = no @ (Feb - Dec)"
|
// 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("winter_road", "yes"), "no @ (Mar - Nov)"},
|
||||||
{OsmElement::Tag("ice_road", "yes"), "no @ (Mar - Nov)"}};
|
{OsmElement::Tag("ice_road", "yes"), "no @ (Mar - Nov)"}};
|
||||||
|
|
||||||
|
|||||||
@@ -9,13 +9,14 @@
|
|||||||
#include "routing/vehicle_mask.hpp"
|
#include "routing/vehicle_mask.hpp"
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <map>
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "3party/ankerl/unordered_dense.h"
|
||||||
|
|
||||||
namespace routing
|
namespace routing
|
||||||
{
|
{
|
||||||
class OsmWay2FeaturePoint;
|
class OsmWay2FeaturePoint;
|
||||||
@@ -92,7 +93,7 @@ void Load(Source & src, ConditionalRAVectorT & vec)
|
|||||||
class RoadAccessTagProcessor
|
class RoadAccessTagProcessor
|
||||||
{
|
{
|
||||||
public:
|
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>;
|
using ConditionalTagsList = std::vector<std::string>;
|
||||||
|
|
||||||
explicit RoadAccessTagProcessor(VehicleType vehicleType);
|
explicit RoadAccessTagProcessor(VehicleType vehicleType);
|
||||||
|
|||||||
@@ -21,6 +21,8 @@
|
|||||||
|
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
|
||||||
|
#include "3party/ankerl/unordered_dense.h"
|
||||||
|
|
||||||
namespace routing_builder
|
namespace routing_builder
|
||||||
{
|
{
|
||||||
using namespace feature;
|
using namespace feature;
|
||||||
@@ -31,7 +33,7 @@ using std::string, std::vector;
|
|||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
// Unified penalty mapping for all OSM tags that create road penalties
|
// 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
|
// Traffic calming measures
|
||||||
|
|
||||||
{OsmElement::Tag("traffic_calming", "rumble_strip"), RoadPenalty::Type::SmallCalming},
|
{OsmElement::Tag("traffic_calming", "rumble_strip"), RoadPenalty::Type::SmallCalming},
|
||||||
|
|||||||
Reference in New Issue
Block a user