Example #1
0
	protected void Insert (string text, int pattern_no)
	{
	    if ( idx.Count == 0 )
	    {
		State prev = null;

		for (int i=0; i < text.Length; i++)
		{
		    State s = new State (text[i]);

		    idx.Add (s);
		    list.Add (s);

		    if (prev != null) prev.next = s.id;

		    prev = s;
		}

		prev.final = true;
		prev.next  = -pattern_no;

		return;
	    }

	    int state = 0;
	    int y = 0;

	    while ( y < text.Length )
	    {
		int next = GetNext ((State) idx[state], text[y]);

		if ( next < 0 )
		{
		    AppendSuffix (state, text.Substring(y), pattern_no);
		    return;
		}
		else if ( y == text.Length - 1 )
		{
			State s = new State ( ((State) idx[state]).id, text[y]);

			s.final = true;
			s.next  = -pattern_no;

			list.Insert ( list.IndexOf(idx[state]), s);

			return;
		}

		state = next;
		y++;
	    }

Console.WriteLine("here we go, not matched: pat {0}", text);
	}
Example #2
0
	protected void AppendSuffix (int state, string text, int pattern_no)
	{
	    State prev = new State(state, text[0]);

	    list.Insert ( list.IndexOf(idx[state]) + 1, prev );

	    for (int i=1; i<text.Length; i++)
	    {
		State s = new State(text[i]);

		list.Add(s);
		if ( s.id >= idx.Count ) idx.Add (s);

		prev.next = s.id;

		prev = s;
	    }

	    prev.final = true;
	    prev.next  = -pattern_no;
	}
Example #3
0
	protected int GetNext (State state, char value)
	{
	    int i = list.IndexOf(state);

	    while ( i < list.Count && state.id == ((State) list[i]).id )
		if ( value != ((State) list[i]).value || ((State) list[i]).next < 0 ) 
		    i++;
		else 
		    return ((State) list[i]).next; 

	    return -1;
	}