Exemple #1
0
        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);
        }
Exemple #2
0
        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);
            }
        }