From a1ee16f983ebaacaa78e92aa0d500a828dc90ca0 Mon Sep 17 00:00:00 2001 From: vng Date: Thu, 1 Sep 2011 14:13:22 +0300 Subject: [PATCH] Make classificator initialization faster. --- indexer/drawing_rule_def.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/indexer/drawing_rule_def.cpp b/indexer/drawing_rule_def.cpp index 5484d40885..0b11b17d56 100644 --- a/indexer/drawing_rule_def.cpp +++ b/indexer/drawing_rule_def.cpp @@ -22,15 +22,21 @@ namespace drule void Key::fromString(string const & s) { int * arrParams[] = { &m_scale, &m_type, &m_index, &m_priority }; + size_t const count = s.size(); - strings::SimpleTokenizer it(s, "|"); + size_t beg = 0; size_t i = 0; - while (it) + do { - ASSERT ( i < ARRAY_SIZE(arrParams), (i) ); + size_t end = s.find_first_of('|', beg); + if (end == string::npos) + end = count; - *(arrParams[i++]) = atoi((*it).c_str()); - ++it; - } + ASSERT ( i < ARRAY_SIZE(arrParams), (i) ); + //*(arrParams[i++]) = atoi(s.substr(beg, end - beg).c_str()); + *(arrParams[i++]) = strtol(&s[beg], 0, 10); + + beg = end + 1; + } while (beg < count); } }