From 43e98c429c78ec08f7bfa26873bf0178ac354556 Mon Sep 17 00:00:00 2001 From: rachytski Date: Thu, 6 Oct 2011 16:02:47 +0300 Subject: [PATCH] minor optimizations for Ruler. --- map/ruler.cpp | 105 ++++++++++++++++++++++++-------------------------- map/ruler.hpp | 6 +-- 2 files changed, 52 insertions(+), 59 deletions(-) diff --git a/map/ruler.cpp b/map/ruler.cpp index 042ea24032..74aa46cb0d 100644 --- a/map/ruler.cpp +++ b/map/ruler.cpp @@ -14,57 +14,57 @@ void Ruler::initFeets() { - m_feets.push_back(make_pair("100 ft", 100)); - m_feets.push_back(make_pair("200 ft", 200)); - m_feets.push_back(make_pair("0.1 mi", 528)); - m_feets.push_back(make_pair("0.2 mi", 528 * 2)); - m_feets.push_back(make_pair("0.5 mi", 528 * 5)); - m_feets.push_back(make_pair("1 mi", 5280)); - m_feets.push_back(make_pair("2 mi", 2 * 5280)); - m_feets.push_back(make_pair("5 mi", 5 * 5280)); - m_feets.push_back(make_pair("10 mi", 10 * 5280)); - m_feets.push_back(make_pair("20 mi", 20 * 5280)); - m_feets.push_back(make_pair("50 mi", 50 * 5280)); - m_feets.push_back(make_pair("100 mi", 100 * 5280)); - m_feets.push_back(make_pair("200 mi", 200 * 5280)); - m_feets.push_back(make_pair("500 mi", 500 * 5280)); + m_units.push_back(make_pair("100 ft", 100)); + m_units.push_back(make_pair("200 ft", 200)); + m_units.push_back(make_pair("0.1 mi", 528)); + m_units.push_back(make_pair("0.2 mi", 528 * 2)); + m_units.push_back(make_pair("0.5 mi", 528 * 5)); + m_units.push_back(make_pair("1 mi", 5280)); + m_units.push_back(make_pair("2 mi", 2 * 5280)); + m_units.push_back(make_pair("5 mi", 5 * 5280)); + m_units.push_back(make_pair("10 mi", 10 * 5280)); + m_units.push_back(make_pair("20 mi", 20 * 5280)); + m_units.push_back(make_pair("50 mi", 50 * 5280)); + m_units.push_back(make_pair("100 mi", 100 * 5280)); + m_units.push_back(make_pair("200 mi", 200 * 5280)); + m_units.push_back(make_pair("500 mi", 500 * 5280)); } void Ruler::initYards() { - m_yards.push_back(make_pair("50 yd", 50)); - m_yards.push_back(make_pair("100 yd", 100)); - m_yards.push_back(make_pair("200 yd", 200)); - m_yards.push_back(make_pair("500 yd", 500)); - m_yards.push_back(make_pair("0.5 mi", 0.5 * 1760)); - m_yards.push_back(make_pair("1 mi", 1760)); - m_yards.push_back(make_pair("2 mi", 2 * 1760)); - m_yards.push_back(make_pair("5 mi", 5 * 1760)); - m_yards.push_back(make_pair("10 mi", 10 * 1760)); - m_yards.push_back(make_pair("20 mi", 20 * 1760)); - m_yards.push_back(make_pair("50 mi", 50 * 1760)); - m_yards.push_back(make_pair("100 mi", 100 * 1760)); - m_yards.push_back(make_pair("200 mi", 200 * 1760)); - m_yards.push_back(make_pair("500 mi", 500 * 1760)); + m_units.push_back(make_pair("50 yd", 50)); + m_units.push_back(make_pair("100 yd", 100)); + m_units.push_back(make_pair("200 yd", 200)); + m_units.push_back(make_pair("500 yd", 500)); + m_units.push_back(make_pair("0.5 mi", 0.5 * 1760)); + m_units.push_back(make_pair("1 mi", 1760)); + m_units.push_back(make_pair("2 mi", 2 * 1760)); + m_units.push_back(make_pair("5 mi", 5 * 1760)); + m_units.push_back(make_pair("10 mi", 10 * 1760)); + m_units.push_back(make_pair("20 mi", 20 * 1760)); + m_units.push_back(make_pair("50 mi", 50 * 1760)); + m_units.push_back(make_pair("100 mi", 100 * 1760)); + m_units.push_back(make_pair("200 mi", 200 * 1760)); + m_units.push_back(make_pair("500 mi", 500 * 1760)); } void Ruler::initMetres() { - m_metres.push_back(make_pair("20 m", 20)); - m_metres.push_back(make_pair("50 m", 50)); - m_metres.push_back(make_pair("100 m", 100)); - m_metres.push_back(make_pair("200 m", 200)); - m_metres.push_back(make_pair("500 m", 500)); - m_metres.push_back(make_pair("1 km", 1000)); - m_metres.push_back(make_pair("2 km", 2000)); - m_metres.push_back(make_pair("5 km", 5000)); - m_metres.push_back(make_pair("10 km", 10000)); - m_metres.push_back(make_pair("20 km", 20000)); - m_metres.push_back(make_pair("50 km", 50000)); - m_metres.push_back(make_pair("100 km", 100000)); - m_metres.push_back(make_pair("200 km", 200000)); - m_metres.push_back(make_pair("500 km", 500000)); - m_metres.push_back(make_pair("1000 km", 1000000)); + m_units.push_back(make_pair("20 m", 20)); + m_units.push_back(make_pair("50 m", 50)); + m_units.push_back(make_pair("100 m", 100)); + m_units.push_back(make_pair("200 m", 200)); + m_units.push_back(make_pair("500 m", 500)); + m_units.push_back(make_pair("1 km", 1000)); + m_units.push_back(make_pair("2 km", 2000)); + m_units.push_back(make_pair("5 km", 5000)); + m_units.push_back(make_pair("10 km", 10000)); + m_units.push_back(make_pair("20 km", 20000)); + m_units.push_back(make_pair("50 km", 50000)); + m_units.push_back(make_pair("100 km", 100000)); + m_units.push_back(make_pair("200 km", 200000)); + m_units.push_back(make_pair("500 km", 500000)); + m_units.push_back(make_pair("1000 km", 1000000)); } namespace { @@ -84,21 +84,18 @@ Ruler::Ruler(Params const & p) case Settings::Foot: { initFeets(); - m_units = &m_feets; m_conversionFn = &MeasurementUtils::MetersToFeet; break; } case Settings::Metric: { initMetres(); - m_units = &m_metres; m_conversionFn = &identity; break; } case Settings::Yard: { initYards(); - m_units = &m_yards; m_conversionFn = &MeasurementUtils::MetersToYards; break; } @@ -161,23 +158,23 @@ void Ruler::update() m_metresDiff = lonDiff / MercatorBounds::degreeInMetres * lonDiffCorrection; - if (m_units->at(0).second > m_conversionFn(m_metresDiff)) + if (m_units[0].second > m_conversionFn(m_metresDiff)) { - m_scalerText = "<" + m_units->at(0).first; + m_scalerText = "<" + m_units[0].first; m_metresDiff = m_minUnitsWidth - 1; } - else if (m_units->back().second <= m_conversionFn(m_metresDiff)) + else if (m_units.back().second <= m_conversionFn(m_metresDiff)) { - m_scalerText = ">" + m_units->back().first; + m_scalerText = ">" + m_units.back().first; m_metresDiff = m_maxUnitsWidth + 1; } else - for (size_t i = 0; i < m_units->size(); ++i) + for (size_t i = 0; i < m_units.size(); ++i) { - if (m_units->at(i).second > m_conversionFn(m_metresDiff)) + if (m_units[i].second > m_conversionFn(m_metresDiff)) { - m_metresDiff = m_units->at(i).second / m_conversionFn(1); - m_scalerText = m_units->at(i).first; + m_metresDiff = m_units[i].second / m_conversionFn(1); + m_scalerText = m_units[i].first; break; } } diff --git a/map/ruler.hpp b/map/ruler.hpp index 0d5aaf905a..c0150a06d0 100644 --- a/map/ruler.hpp +++ b/map/ruler.hpp @@ -44,13 +44,9 @@ private: mutable vector m_boundRects; typedef double (*ConversionFn)(double); - vector > * m_units; + vector > m_units; ConversionFn m_conversionFn; - vector > m_yards; - vector > m_feets; - vector > m_metres; - void initYards(); void initMetres(); void initFeets();