// End-state may have less events then the termination state
        public bool CompareTerminationStateToEndState(
            RowRecogNFAStateEntry terminationState,
            RowRecogNFAStateEntry endState)
        {
            if (terminationState.MatchBeginEventSeqNo != endState.MatchBeginEventSeqNo) {
                return false;
            }

            foreach (var entry in variableStreams) {
                var stream = entry.Value.First;
                var multi = entry.Value.Second;
                if (multi) {
                    var termStreamEvents = RowRecogNFAViewUtil.GetMultimatchArray(
                        multimatchStreamNumToVariable,
                        terminationState,
                        stream);
                    var endStreamEvents = RowRecogNFAViewUtil.GetMultimatchArray(
                        multimatchStreamNumToVariable,
                        endState,
                        stream);
                    if (endStreamEvents != null) {
                        if (termStreamEvents == null) {
                            return false;
                        }

                        for (var i = 0; i < endStreamEvents.Length; i++) {
                            if (termStreamEvents.Length > i &&
                                !EventBeanUtility.EventsAreEqualsAllowNull(
                                    endStreamEvents[i],
                                    termStreamEvents[i])) {
                                return false;
                            }
                        }
                    }
                }
                else {
                    var termStreamEvent = terminationState.EventsPerStream[stream];
                    var endStreamEvent = endState.EventsPerStream[stream];
                    if (!EventBeanUtility.EventsAreEqualsAllowNull(endStreamEvent, termStreamEvent)) {
                        return false;
                    }
                }
            }

            return true;
        }
 // End-state may have less events then the termination state
 public bool CompareTerminationStateToEndState(RegexNFAStateEntry terminationState, RegexNFAStateEntry endState)
 {
     if (terminationState.MatchBeginEventSeqNo != endState.MatchBeginEventSeqNo)
     {
         return(false);
     }
     foreach (var entry in _variableStreams)
     {
         int  stream = entry.Value.First;
         bool multi  = entry.Value.Second;
         if (multi)
         {
             EventBean[] termStreamEvents = EventRowRegexNFAViewUtil.GetMultimatchArray(_multimatchStreamNumToVariable, terminationState, stream);
             EventBean[] endStreamEvents  = EventRowRegexNFAViewUtil.GetMultimatchArray(_multimatchStreamNumToVariable, endState, stream);
             if (endStreamEvents != null)
             {
                 if (termStreamEvents == null)
                 {
                     return(false);
                 }
                 for (int i = 0; i < endStreamEvents.Length; i++)
                 {
                     if (termStreamEvents.Length > i && !EventBeanUtility.EventsAreEqualsAllowNull(endStreamEvents[i], termStreamEvents[i]))
                     {
                         return(false);
                     }
                 }
             }
         }
         else
         {
             EventBean termStreamEvent = terminationState.EventsPerStream[stream];
             EventBean endStreamEvent  = endState.EventsPerStream[stream];
             if (!EventBeanUtility.EventsAreEqualsAllowNull(endStreamEvent, termStreamEvent))
             {
                 return(false);
             }
         }
     }
     return(true);
 }