diff options
author | vng <viktor.govako@gmail.com> | 2011-11-11 18:21:03 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:27:42 +0300 |
commit | de5531f2f1d1695d15c5025c59ba58bf57b3848b (patch) | |
tree | 5dff1fd03d63a9c08f193adcfd2a519ee5db3eb7 /indexer/drawing_rule_def.cpp | |
parent | eb74bed55d707ce1eb9ee0314acb8ae79b056d92 (diff) |
Factor out some rules processing functions.
Diffstat (limited to 'indexer/drawing_rule_def.cpp')
-rw-r--r-- | indexer/drawing_rule_def.cpp | 57 |
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()); + } } |