diff options
author | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2015-06-30 12:41:54 +0300 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 02:54:30 +0300 |
commit | 6927e23f86aa9adaaf1d16d3b34dd62671644453 (patch) | |
tree | 70c19e39df853d2aeb410702b7399455f3034c38 /routing/turns_sound_settings.cpp | |
parent | 087e13038e7a2237142b83c84392976ce0150fb6 (diff) |
Turn voice notification. C++ part.
Diffstat (limited to 'routing/turns_sound_settings.cpp')
-rw-r--r-- | routing/turns_sound_settings.cpp | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/routing/turns_sound_settings.cpp b/routing/turns_sound_settings.cpp new file mode 100644 index 0000000000..935356f612 --- /dev/null +++ b/routing/turns_sound_settings.cpp @@ -0,0 +1,103 @@ +#include "routing/turns_sound_settings.hpp" + +#include "platform/measurement_utils.hpp" + +#include "base/string_utils.hpp" + +namespace +{ +using namespace routing::turns::sound; + +} // namespace + +namespace routing +{ +namespace turns +{ +namespace sound +{ +bool Settings::IsValid() const +{ + return m_lengthUnits != LengthUnits::Undefined && + m_minNotificationDistanceUnits <= m_maxNotificationDistanceUnits && + !m_soundedDistancesUnits.empty() && + is_sorted(m_soundedDistancesUnits.cbegin(), m_soundedDistancesUnits.cend()); +} + +double Settings::ComputeTurnNotificationDistanceUnits(double speedUnitsPerSecond) const +{ + ASSERT(IsValid(), ()); + + double turnNotificationDistance = m_notificationTimeSeconds * speedUnitsPerSecond; + + if (turnNotificationDistance < m_minNotificationDistanceUnits) + turnNotificationDistance = m_minNotificationDistanceUnits; + if (turnNotificationDistance > m_maxNotificationDistanceUnits) + turnNotificationDistance = m_maxNotificationDistanceUnits; + + return turnNotificationDistance; +} + +uint32_t Settings::RoundByPresetSoundedDistancesUnits(uint32_t turnNotificationUnits) const +{ + ASSERT(IsValid(), ()); + + for (auto const distUnits : m_soundedDistancesUnits) + { + if (distUnits >= turnNotificationUnits) + return distUnits; + } + + ASSERT(false, ("m_soundedDistancesUnits shall contain bigger values.")); + return m_soundedDistancesUnits.empty() ? 0 : m_soundedDistancesUnits.back(); +} + +double Settings::ConvertMetersPerSecondToUnitsPerSecond(double speedInMetersPerSecond) const +{ + switch (m_lengthUnits) + { + case LengthUnits::Undefined: + default: + ASSERT(false, ()); + return 0.; + case LengthUnits::Meters: + return speedInMetersPerSecond; + case LengthUnits::Feet: + return MeasurementUtils::MetersToFeet(speedInMetersPerSecond); + } +} + +double Settings::ConvertUnitsToMeters(double distanceInUnits) const +{ + switch (m_lengthUnits) + { + case LengthUnits::Undefined: + default: + ASSERT(false, ()); + return 0.; + case LengthUnits::Meters: + return distanceInUnits; + case LengthUnits::Feet: + return MeasurementUtils::FeetToMeters(distanceInUnits); + } +} + +string DebugPrint(LengthUnits const & lengthUnits) +{ + switch (lengthUnits) + { + case LengthUnits::Undefined: + return "LengthUnits::Undefined"; + case LengthUnits::Meters: + return "LengthUnits::Undefined"; + case LengthUnits::Feet: + return "LengthUnits::Feet"; + default: + stringstream out; + out << "Unknown LengthUnits value: " << static_cast<int>(lengthUnits); + return out.str(); + } +} +} // namespace sound +} // namespace turns +} // namespace routing |