Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2015-06-30 12:41:54 +0300
committerAlex Zolotarev <alex@maps.me>2015-09-23 02:54:30 +0300
commit6927e23f86aa9adaaf1d16d3b34dd62671644453 (patch)
tree70c19e39df853d2aeb410702b7399455f3034c38 /routing/turns_sound_settings.cpp
parent087e13038e7a2237142b83c84392976ce0150fb6 (diff)
Turn voice notification. C++ part.
Diffstat (limited to 'routing/turns_sound_settings.cpp')
-rw-r--r--routing/turns_sound_settings.cpp103
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