/// <summary> /// Create a new outgoing transition labeled <paramref name="label"/> and return /// the newly created target state for this transition. /// </summary> internal State NewState(int label) { Debug.Assert(Array.BinarySearch(labels, label) < 0, "State already has transition labeled: " + label); labels = Arrays.CopyOf(labels, labels.Length + 1); states = Arrays.CopyOf(states, states.Length + 1); labels[labels.Length - 1] = label; return(states[states.Length - 1] = new State()); }
/// <summary> /// Two states are equal if: /// <list type="bullet"> /// <item><description>They have an identical number of outgoing transitions, labeled with /// the same labels.</description></item> /// <item><description>Corresponding outgoing transitions lead to the same states (to states /// with an identical right-language).</description></item> /// </list> /// </summary> public override bool Equals(object obj) { State other = (State)obj; return(is_final == other.is_final && Arrays.Equals(this.labels, other.labels) && ReferenceEquals(this.states, other.states)); }