public int Compare(ILexEntry x, ILexEntry y) { HomographNumber hnx = m_lexicon.m_homographNumbers.GetOrCreateValue(x); HomographNumber hny = m_lexicon.m_homographNumbers.GetOrCreateValue(y); return(hnx.Number.CompareTo(hny.Number)); }
internal FdoLexEntryLexeme GetEntryLexeme(ILexEntry entry) { CreateEntryIndexIfNeeded(); LexemeType type = GetLexemeTypeForMorphType(entry.PrimaryMorphType); HomographNumber hn = m_homographNumbers.GetOrCreateValue(entry); string form = entry.LexemeFormOA == null ? string.Empty : entry.LexemeFormOA.Form.VernacularDefaultWritingSystem.Text ?? string.Empty; return(new FdoLexEntryLexeme(this, new LexemeKey(type, form.Normalize(), hn.Number))); }
private void CreateEntryIndexIfNeeded() { if (m_entryIndex != null) { return; } m_entryIndex = new Dictionary <LexemeKey, SortedSet <ILexEntry> >(); foreach (ILexEntry entry in m_cache.ServiceLocator.GetInstance <ILexEntryRepository>().AllInstances()) { LexemeType type = GetLexemeTypeForMorphType(entry.PrimaryMorphType); string form = entry.LexemeFormOA == null ? string.Empty : entry.LexemeFormOA.Form.VernacularDefaultWritingSystem.Text ?? string.Empty; var key = new LexemeKey(type, form.Normalize()); SortedSet <ILexEntry> entries; if (!m_entryIndex.TryGetValue(key, out entries)) { entries = new SortedSet <ILexEntry>(m_entryComparer); m_entryIndex[key] = entries; } HomographNumber hn = m_homographNumbers.GetOrCreateValue(entry); if (hn.Number == 0) { int num = 1; foreach (ILexEntry e in entries) { if (m_homographNumbers.GetOrCreateValue(e).Number != num) { break; } num++; } hn.Number = num; } entries.Add(entry); } }