minor optimizations for Ruler.

This commit is contained in:
rachytski 2011-10-06 16:02:47 +03:00 committed by Alex Zolotarev
parent 6a867b1683
commit 43e98c429c
2 changed files with 52 additions and 59 deletions

View file

@ -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;
}
}

View file

@ -44,13 +44,9 @@ private:
mutable vector<m2::AnyRectD> m_boundRects;
typedef double (*ConversionFn)(double);
vector<pair<string, double> > * m_units;
vector<pair<string, double> > m_units;
ConversionFn m_conversionFn;
vector<pair<string, double> > m_yards;
vector<pair<string, double> > m_feets;
vector<pair<string, double> > m_metres;
void initYards();
void initMetres();
void initFeets();