diff options
author | Constantin Shalnev <c.shalnev@corp.mail.ru> | 2015-09-10 17:02:54 +0300 |
---|---|---|
committer | Constantin Shalnev <c.shalnev@corp.mail.ru> | 2015-09-23 13:44:17 +0300 |
commit | 2ed83972365ab46dedcd456d088e4b8310fd0e1f (patch) | |
tree | 7f65501ac68666fccdc56a4ee9274c57a61c0402 /indexer/classificator.cpp | |
parent | 1acbb7bcdf9a7b424e318941658c31914a22b98a (diff) |
Added processing of apply_if in the kernel
Diffstat (limited to 'indexer/classificator.cpp')
-rw-r--r-- | indexer/classificator.cpp | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/indexer/classificator.cpp b/indexer/classificator.cpp index aa2ae74c2b..a1dbc11fb4 100644 --- a/indexer/classificator.cpp +++ b/indexer/classificator.cpp @@ -8,6 +8,15 @@ #include "std/algorithm.hpp" #include "std/iterator.hpp" +namespace +{ + struct less_scales + { + bool operator() (drule::Key const & l, int r) const { return l.m_scale < r; } + bool operator() (int l, drule::Key const & r) const { return l < r.m_scale; } + bool operator() (drule::Key const & l, drule::Key const & r) const { return l.m_scale < r.m_scale; } + }; +} // namespace ///////////////////////////////////////////////////////////////////////////////////////// // ClassifObject implementation @@ -39,9 +48,12 @@ ClassifObject * ClassifObject::Find(string const & s) void ClassifObject::AddDrawRule(drule::Key const & k) { for (size_t i = 0; i < m_drawRule.size(); ++i) - if (k == m_drawRule[i]) return; + if (k == m_drawRule[i]) + return; - m_drawRule.push_back(k); + auto i = lower_bound(m_drawRule.begin(), m_drawRule.end(), k.m_scale, less_scales()); + while (i != m_drawRule.end() && i->m_scale == k.m_scale) ++i; + m_drawRule.insert(i, k); } ClassifObjectPtr ClassifObject::BinaryFind(string const & s) const @@ -61,16 +73,6 @@ void ClassifObject::LoadPolicy::Start(size_t i) base_type::Start(i); } -namespace -{ - struct less_scales - { - bool operator() (drule::Key const & l, int r) const { return l.m_scale < r; } - bool operator() (int l, drule::Key const & r) const { return l < r.m_scale; } - bool operator() (drule::Key const & l, drule::Key const & r) const { return l.m_scale < r.m_scale; } - }; -} - void ClassifObject::LoadPolicy::EndChilds() { ClassifObject * p = Current(); |