bool FindLastCharLocation(int[] symbols, IDawgReader reader) { for (var i = 0; i < symbols.Length; i++) { var symbolId = symbols[i]; while (reader.SymbolId != symbolId && !reader.IsLastSibling) { if (!reader.MoveNextSibling()) { return(false); } } if (reader.SymbolId != symbolId) { return(false); } if (i == symbols.Length - 1) { return(true); } if (!reader.MoveToFirstChild()) { return(false); } } return(false); }
IEnumerable <string> SuffixesFrom(IDawgReader reader, StringBuilder builder) { if (reader.Current == 0) { yield break; } builder.Append(_charset[reader.SymbolId]); if (reader.IsEndOfWord) { yield return(builder.ToString()); } if (reader.FirstChild != 0) { var current = reader.Current; if (!reader.MoveToFirstChild()) { yield break; } foreach (var word in SuffixesFrom(reader, builder)) { yield return(word); } reader.MoveToNode(current); } builder.Length--; if (reader.IsLastSibling) { yield break; } reader.MoveNextSibling(); foreach (var word in SuffixesFrom(reader, builder)) { yield return(word); } }