void PhraseIndexerImpl::addPhrase(unsigned clsid, const string &phrase, unsigned rank, const char *udata) { map<phrase_hash_t, unsigned>::const_iterator it; phrase_hash_t h; Phrase *pphrase; MurmurHash(phrase, &h); // chech whatever such phrase already stored it = m_phrase2id.find(h); if (it == m_phrase2id.end()) { unsigned phraseId = m_stat.nphrases_uniq; pphrase = insertPhraseWords(phrase, phraseId); if (!pphrase) return; m_phrase2id.insert(pair<phrase_hash_t, unsigned>(h, phraseId)); if (udata != NULL) m_udataWriter.add(phraseId, (string)udata); m_stat.nphrases_uniq++; } else { pphrase = &m_phrases[it->second]; m_stat.nwords += pphrase->nwords(); } m_stat.nphrases++; pphrase->addClass(clsid, rank); m_bDirty = true; }