private bool IsMatch(MatchingEnd end, byte b)
        {
            byte[][] upper;
            byte[][] lower;
            if (end == MatchingEnd.Start)
            {
                upper = startStringUpper;
                lower = startStringLower;
            }
            else
            {
                upper = endStringUpper;
                lower = endStringLower;
            }

            for (var i = 0; i < currentStartStringsToSkip.Length; i++)
            {
                if (currentStartStringsToSkip[i])
                {
                    continue;
                }
                var lowerToMatch = lower[i];
                var upperToMatch = upper[i];
                if ((b == lowerToMatch[matchPosition] || b == upperToMatch[matchPosition]))
                {
                    continue;
                }
                if (end == MatchingEnd.Start && state == SearchState.MatchingStart)
                {
                    currentStartStringsToSkip[i] = true;
                }
                else
                {
                    return(false);
                }
            }
            return(currentStartStringsToSkip.Any(x => x == false));
        }
        private bool IsMatch(MatchingEnd end, byte b)
        {
            byte[][] upper;
            byte[][] lower;
            if(end == MatchingEnd.Start)
            {
                upper = startStringUpper;
                lower = startStringLower;
            }
            else
            {
                upper = endStringUpper;
                lower = endStringLower;
            }

            for(var i = 0; i < currentStartStringsToSkip.Length; i++)
            {
                if (currentStartStringsToSkip[i]) continue;
                var lowerToMatch = lower[i];
                var upperToMatch = upper[i];
                if ((b == lowerToMatch[matchPosition] || b == upperToMatch[matchPosition])) continue;
                if (end == MatchingEnd.Start && state == SearchState.MatchingStart)
                    currentStartStringsToSkip[i] = true;
                else
                    return false;
            }
            return currentStartStringsToSkip.Any(x => x == false);
        }
        private bool IsMatch(MatchingEnd end, byte b)
        {
            IList<byte[]> upper;
            IList<byte[]> lower;
            if(end == MatchingEnd.Start)
            {
                upper = StartStringUpper;
                lower = StartStringLower;
            }
            else
            {
                upper = EndStringUpper;
                lower = EndStringLower;
            }

            for(var i = 0; i < currentStartStringsToSkip.Count; i++)
            {
                if (!currentStartStringsToSkip[i])
                {
                    var lowerToMatch = lower[i];
                    var upperToMatch = upper[i];
                    if (!(b == lowerToMatch[matchPosition] || b == upperToMatch[matchPosition]))
                    {
                        if (end == MatchingEnd.Start && state == SearchState.MatchingStart)
                            currentStartStringsToSkip[i] = true;
                        else
                            return false;
                    }
                }
            }
            return currentStartStringsToSkip.Any(x => x == false);
        }
 private bool IsMatch(MatchingEnd end, byte b)
 {
     byte[] upper;
     byte[] lower;
     if(end == MatchingEnd.Start)
     {
         upper = StartStringUpper;
         lower = StartStringLower;
     }
     else
     {
         upper = EndStringUpper;
         lower = EndStringLower;
     }
     return b == lower[matchPosition] || b == upper[matchPosition];
 }