internal Enumerator(CharacterStream target)
 {
     Monitor.Enter(_target._syncRoot);
     try
     {
     }
     finally { Monitor.Exit(_target._syncRoot); }
     _position = (_startIndex = (_target = target)._startIndex) - 1;
     _endIndex = target._endIndex;
 }
 /// <summary>
 /// Splits the current <see cref="CharacterStream"/> into a new <see cref="CharacterStream"/> after the specified length.
 /// </summary>
 /// <param name="length">The number of characters to retain in the current <see cref="CharacterStream"/>.</param>
 /// <returns>A <see cref="CharacterStream"/> containing the characters that were in the current <see cref="CharacterStream"/> beyond the specified <paramref name="length"/>.</returns>
 /// <exception cref="ArgumentOutOfRangeException"><paramref name="length"/> is less than zero or greater than <see cref="Count"/>.</exception>
 public CharacterStream Split(int length)
 {
     Monitor.Enter(_syncRoot);
     try
     {
         if (length < 0 || length > Count)
         {
             throw new ArgumentOutOfRangeException("length");
         }
         CharacterStream result = new CharacterStream((length < Count) ? _value.Substring(_startIndex + length, Count - length) : string.Empty);
         _startIndex += length;
         Count       -= length;
         return(result);
     }
     finally { Monitor.Exit(_syncRoot); }
 }