bool TokenizeStringAndCheckIfLastTokenIsPrefix(strings::UniString const & s, ContainerT & tokens, DelimsT const & delimiter) { SplitUniString(s, MakeBackInsertFunctor(tokens), delimiter); return !s.empty() && !delimiter(s.back()); }
void CategoriesHolder::AddCategory(Category & cat, vector<uint32_t> & types) { if (!cat.m_synonyms.empty() && !types.empty()) { shared_ptr<Category> p(new Category()); p->Swap(cat); for (size_t i = 0; i < types.size(); ++i) m_type2cat.insert(make_pair(types[i], p)); for (size_t i = 0; i < p->m_synonyms.size(); ++i) { ASSERT(p->m_synonyms[i].m_locale != kUnsupportedLocaleCode, ()); StringT const uniName = search::NormalizeAndSimplifyString(p->m_synonyms[i].m_name); vector<StringT> tokens; SplitUniString(uniName, MakeBackInsertFunctor(tokens), search::Delimiters()); for (size_t j = 0; j < tokens.size(); ++j) for (size_t k = 0; k < types.size(); ++k) if (ValidKeyToken(tokens[j])) m_name2type.insert( make_pair(make_pair(p->m_synonyms[i].m_locale, tokens[j]), types[k])); } }
NameScore GetNameScore(string const & name, TSlice const & slice) { if (slice.Empty()) return NAME_SCORE_ZERO; vector<strings::UniString> tokens; SplitUniString(NormalizeAndSimplifyString(name), MakeBackInsertFunctor(tokens), Delimiters()); return GetNameScore(tokens, slice); }
void NormalizeAndTokenizeString(string const & s, TCont & tokens, TDelims const & delims) { SplitUniString(NormalizeAndSimplifyString(s), MakeBackInsertFunctor(tokens), delims); }