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:
authorvng <viktor.govako@gmail.com>2011-11-11 18:21:03 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:27:42 +0300
commitde5531f2f1d1695d15c5025c59ba58bf57b3848b (patch)
tree5dff1fd03d63a9c08f193adcfd2a519ee5db3eb7 /indexer/drawing_rule_def.cpp
parenteb74bed55d707ce1eb9ee0314acb8ae79b056d92 (diff)
Factor out some rules processing functions.
Diffstat (limited to 'indexer/drawing_rule_def.cpp')
-rw-r--r--indexer/drawing_rule_def.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/indexer/drawing_rule_def.cpp b/indexer/drawing_rule_def.cpp
index 0cd10a4b99..1df08bf5a7 100644
--- a/indexer/drawing_rule_def.cpp
+++ b/indexer/drawing_rule_def.cpp
@@ -38,4 +38,61 @@ namespace drule
beg = end + 1;
} while (beg < count);
}
+
+ namespace
+ {
+ struct less_key
+ {
+ bool operator() (drule::Key const & r1, drule::Key const & r2) const
+ {
+ if (r1.m_type == r2.m_type)
+ {
+ // assume that unique algo leaves the first element (with max priority), others - go away
+ return (r1.m_priority > r2.m_priority);
+ }
+ else
+ return (r1.m_type < r2.m_type);
+ }
+ };
+
+ struct equal_key
+ {
+ bool operator() (drule::Key const & r1, drule::Key const & r2) const
+ {
+ // many line and area rules - is ok, other rules - one is enough
+ // By VNG: Why many area styles ??? Did I miss something ???
+ if (r1.m_type == drule::line /*|| r1.m_type == drule::area*/)
+ return (r1 == r2);
+ else
+ return (r1.m_type == r2.m_type);
+ }
+ };
+
+ struct less_scale_type_depth
+ {
+ bool operator() (drule::Key const & r1, drule::Key const & r2) const
+ {
+ if (r1.m_scale == r2.m_scale)
+ {
+ if (r1.m_type == r2.m_type)
+ {
+ return (r1.m_priority < r2.m_priority);
+ }
+ else return (r1.m_type < r2.m_type);
+ }
+ else return (r1.m_scale < r2.m_scale);
+ }
+ };
+ }
+
+ void MakeUnique(vector<Key> & keys)
+ {
+ sort(keys.begin(), keys.end(), less_key());
+ keys.erase(unique(keys.begin(), keys.end(), equal_key()), keys.end());
+ }
+
+ void SortByScaleTypeDepth(vector<Key> & keys)
+ {
+ sort(keys.begin(), keys.end(), less_scale_type_depth());
+ }
}