diff options
author | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-06-07 13:22:44 +0300 |
---|---|---|
committer | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-06-17 19:36:51 +0300 |
commit | 4cac8206b33bf59fb44e039580fe312c31d7a5dd (patch) | |
tree | 1fbfd37b3a449c6f2c24af68c711ec65a949b36f /routing | |
parent | f61de40e04d2a75d85c98a5b8743b3c0e0a6d308 (diff) |
Review fixes.
Diffstat (limited to 'routing')
-rw-r--r-- | routing/bicycle_model.cpp | 24 | ||||
-rw-r--r-- | routing/bicycle_model.hpp | 22 | ||||
-rw-r--r-- | routing/pedestrian_model.cpp | 18 | ||||
-rw-r--r-- | routing/pedestrian_model.hpp | 17 | ||||
-rw-r--r-- | routing/vehicle_model.hpp | 16 |
5 files changed, 52 insertions, 45 deletions
diff --git a/routing/bicycle_model.cpp b/routing/bicycle_model.cpp index 962939377c..c5e4798a81 100644 --- a/routing/bicycle_model.cpp +++ b/routing/bicycle_model.cpp @@ -617,28 +617,28 @@ void BicycleModel::Init() SetAdditionalRoadTypes(classif(), arr, ARRAY_SIZE(arr)); } -bool BicycleModel::IsNoBicycle(feature::TypesHolder const & types) const +VehicleModel::Restriction BicycleModel::IsNoBicycle(feature::TypesHolder const & types) const { - return find(types.begin(), types.end(), m_noBicycleType) != types.end(); + return types.Has(m_noBicycleType) ? Restriction::Yes : Restriction::Unknown; } -bool BicycleModel::IsYesBicycle(feature::TypesHolder const & types) const +VehicleModel::Restriction BicycleModel::IsYesBicycle(feature::TypesHolder const & types) const { - return find(types.begin(), types.end(), m_yesBicycleType) != types.end(); + return types.Has(m_yesBicycleType) ? Restriction::Yes : Restriction::Unknown; } -bool BicycleModel::IsBicycleBidir(feature::TypesHolder const & types) const +VehicleModel::Restriction BicycleModel::IsBicycleBidir(feature::TypesHolder const & types) const { - return find(types.begin(), types.end(), m_bicycleBidirType) != types.end(); + return types.Has(m_bicycleBidirType) ? Restriction::Yes : Restriction::Unknown; } double BicycleModel::GetSpeed(FeatureType const & f) const { - feature::TypesHolder types(f); + feature::TypesHolder const types(f); - if (IsYesBicycle(types)) + if (IsYesBicycle(types) == Restriction::Yes) return VehicleModel::GetMaxSpeed(); - if (!IsNoBicycle(types) && HasRoadType(types)) + if (IsNoBicycle(types) == Restriction::Unknown && HasRoadType(types)) return VehicleModel::GetMinTypeSpeed(types); return 0.0; @@ -648,7 +648,7 @@ bool BicycleModel::IsOneWay(FeatureType const & f) const { feature::TypesHolder const types(f); - if (IsBicycleBidir(types)) + if (IsBicycleBidir(types) == Restriction::Yes) return false; return VehicleModel::IsOneWay(f); @@ -659,9 +659,9 @@ bool BicycleModel::IsRoad(FeatureType const & f) const if (f.GetFeatureType() != feature::GEOM_LINE) return false; - feature::TypesHolder types(f); + feature::TypesHolder const types(f); - if (IsNoBicycle(types)) + if (IsNoBicycle(types) == Restriction::Yes) return false; return VehicleModel::HasRoadType(types); } diff --git a/routing/bicycle_model.hpp b/routing/bicycle_model.hpp index 83875e6cbb..64e1ded4d0 100644 --- a/routing/bicycle_model.hpp +++ b/routing/bicycle_model.hpp @@ -14,25 +14,27 @@ public: BicycleModel(); BicycleModel(VehicleModel::InitListT const & speedLimits); - /// VehicleModel overrides. + /// VehicleModel overrides: double GetSpeed(FeatureType const & f) const override; bool IsOneWay(FeatureType const & f) const override; + /// @returns true if |f| could be considered as a road. + /// @note If BicycleModel::IsRoad(f) returns false for a feature f and for an instance + /// of |BicycleModel| created by default constructor + /// BicycleModel::IsRoad(f) for the same feature f and for any instance + /// of |BicycleModel| created by |BicycleModel(VehicleModel::InitListT const &)| must return false. bool IsRoad(FeatureType const & f) const override; private: void Init(); - /// @return true if road is prohibited for bicycle, - /// but if function returns false, real prohibition is unknown. - bool IsNoBicycle(feature::TypesHolder const & types) const; + /// @return Restriction::Yes if road is prohibited for bicycle. + Restriction IsNoBicycle(feature::TypesHolder const & types) const; - /// @return true if road is allowed for bicycle, - /// but if function returns false, real allowance is unknown. - bool IsYesBicycle(feature::TypesHolder const & types) const; + /// @return Restriction::Yes if road is allowed for bicycle. + Restriction IsYesBicycle(feature::TypesHolder const & types) const; - /// @return true if it is allowed to ride bicycle in two directions, - /// but if function returns false, real allowance is unknown. - bool IsBicycleBidir(feature::TypesHolder const & types) const; + /// @return Restriction::Yes if it is allowed to ride bicycle in two directions. + Restriction IsBicycleBidir(feature::TypesHolder const & types) const; uint32_t m_noBicycleType = 0; uint32_t m_yesBicycleType = 0; diff --git a/routing/pedestrian_model.cpp b/routing/pedestrian_model.cpp index e2a305a147..7820f390a3 100644 --- a/routing/pedestrian_model.cpp +++ b/routing/pedestrian_model.cpp @@ -636,23 +636,23 @@ void PedestrianModel::Init() SetAdditionalRoadTypes(classif(), arr, ARRAY_SIZE(arr)); } -bool PedestrianModel::IsNoFoot(feature::TypesHolder const & types) const +VehicleModel::Restriction PedestrianModel::IsNoFoot(feature::TypesHolder const & types) const { - return find(types.begin(), types.end(), m_noFootType) != types.end(); + return types.Has(m_noFootType) ? Restriction::Yes : Restriction::Unknown; } -bool PedestrianModel::IsYesFoot(feature::TypesHolder const & types) const +VehicleModel::Restriction PedestrianModel::IsYesFoot(feature::TypesHolder const & types) const { - return find(types.begin(), types.end(), m_yesFootType) != types.end(); + return types.Has(m_yesFootType) ? Restriction::Yes : Restriction::Unknown; } double PedestrianModel::GetSpeed(FeatureType const & f) const { - feature::TypesHolder types(f); + feature::TypesHolder const types(f); - if (IsYesFoot(types)) + if (IsYesFoot(types) == Restriction::Yes) return VehicleModel::GetMaxSpeed(); - if (!IsNoFoot(types) && HasRoadType(types)) + if (IsNoFoot(types) == Restriction::Unknown && HasRoadType(types)) return VehicleModel::GetMinTypeSpeed(types); return 0.0; @@ -663,9 +663,9 @@ bool PedestrianModel::IsRoad(FeatureType const & f) const if (f.GetFeatureType() != feature::GEOM_LINE) return false; - feature::TypesHolder types(f); + feature::TypesHolder const types(f); - if (IsNoFoot(types)) + if (IsNoFoot(types) == Restriction::Yes) return false; return VehicleModel::HasRoadType(types); } diff --git a/routing/pedestrian_model.hpp b/routing/pedestrian_model.hpp index 3369ed46be..7b27868452 100644 --- a/routing/pedestrian_model.hpp +++ b/routing/pedestrian_model.hpp @@ -14,21 +14,24 @@ public: PedestrianModel(); PedestrianModel(VehicleModel::InitListT const & speedLimits); - /// VehicleModel overrides. + /// VehicleModel overrides: double GetSpeed(FeatureType const & f) const override; bool IsOneWay(FeatureType const &) const override { return false; } + /// @returns true if |f| could be considered as a road for pedestrian routing. + /// @note If PedestrianModel::IsRoad(f) returns false for a feature f and for an instance + /// of |PedestrianModel| created by default constructor + /// PedestrianModel::IsRoad(f) for the same feature f and for any instance + /// of |PedestrianModel| created by |PedestrianModel(VehicleModel::InitListT const &)| must return false. bool IsRoad(FeatureType const & f) const override; private: void Init(); - /// @return True if road is prohibited for pedestrian, - /// but if function returns False, real prohibition is unknown. - bool IsNoFoot(feature::TypesHolder const & types) const; + /// @return Restriction::Yes if road is prohibited for pedestrian. + Restriction IsNoFoot(feature::TypesHolder const & types) const; - /// @return True if road is allowed for pedestrian, - /// but if function returns False, real allowance is unknown. - bool IsYesFoot(feature::TypesHolder const & types) const; + /// @return Restriction::Yes if road is allowed for pedestrian. + Restriction IsYesFoot(feature::TypesHolder const & types) const; uint32_t m_noFootType = 0; uint32_t m_yesFootType = 0; diff --git a/routing/vehicle_model.hpp b/routing/vehicle_model.hpp index f01427838b..ad8d927e7f 100644 --- a/routing/vehicle_model.hpp +++ b/routing/vehicle_model.hpp @@ -60,29 +60,31 @@ public: VehicleModel(Classificator const & c, InitListT const & speedLimits); - /// IVehicleModel overrides. + /// IVehicleModel overrides: double GetSpeed(FeatureType const & f) const override; double GetMaxSpeed() const override { return m_maxSpeedKMpH; } bool IsOneWay(FeatureType const & f) const override; - /// @note If VehicleModel::IsRoad() returns true for a feature its implementation in - /// inherited class may return true or false. - /// If VehicleModel::IsRoad() returns false for a feature its implementation in - /// inherited class must return false as well. bool IsRoad(FeatureType const & f) const override; /// @returns true if |m_types| or |m_addRoadTypes| contains |type| and false otherwise. - /// @note The set of |types| IsRoadType method returns true for should contain any set of feature types - /// IsRoad method (and its implementation in inherited classes) returns true for. bool IsRoadType(uint32_t type) const; template <class TList> bool HasRoadType(TList const & types) const { for (uint32_t t : types) + { if (IsRoadType(t)) return true; + } return false; } protected: + enum class Restriction + { + Unknown, + Yes, + }; + /// Used in derived class constructors only. Not for public use. void SetAdditionalRoadTypes(Classificator const & c, initializer_list<char const *> const * arr, size_t sz); |