public SubsetStringView(string baseString, int startIndex, int endIndex, CountLengthToEndOfBlock counter)
        {
            if (startIndex < 0 || (!string.IsNullOrEmpty(baseString) && startIndex >= baseString.Length) || (string.IsNullOrEmpty(baseString) && startIndex != 0))
            {
                throw new ArgumentException("Index out of string range", nameof(startIndex));
            }
            if (endIndex < 0 || (!string.IsNullOrEmpty(baseString) && endIndex > baseString.Length) || (string.IsNullOrEmpty(baseString) && endIndex != 0))
            {
                throw new ArgumentException("Index out of string range", nameof(endIndex));
            }
            if (endIndex < startIndex)
            {
                throw new ArgumentException("Incorrect range specified. End index should not be smaller than start index.", nameof(endIndex));
            }

            m_BaseString       = baseString;
            m_BaseStringLength = baseString?.Length ?? 0;

            var length = endIndex - startIndex;

            m_Counts  = new int[length];
            m_Indexes = new List <int>(length);

            for (var i = startIndex; i < endIndex; ++i)
            {
                m_Indexes.Add(i);
            }

            counter(baseString, m_Counts, startIndex, endIndex);
        }
 public SubsetStringView(string baseString, int startIndex, CountLengthToEndOfBlock counter)
     : this(baseString, startIndex, baseString.Length, counter)
 {
 }
 public SubsetStringView(string baseString, CountLengthToEndOfBlock counter)
     : this(baseString, 0, baseString.Length, counter)
 {
 }