@@ -17,7 +17,7 @@ internal ref struct ReverseStringBuilder
1717 private SequenceSegment ? _fallbackSequenceSegment ;
1818
1919 // For testing.
20- internal int SequenceSegmentCount => _fallbackSequenceSegment ? . Count ( ) ?? 0 ;
20+ internal readonly int SequenceSegmentCount => _fallbackSequenceSegment ? . Count ( ) ?? 0 ;
2121
2222 public ReverseStringBuilder ( int conservativeEstimatedStringLength )
2323 {
@@ -33,7 +33,7 @@ public ReverseStringBuilder(Span<char> initialBuffer)
3333 _nextEndIndex = _currentBuffer . Length ;
3434 }
3535
36- public bool Empty => _nextEndIndex == _currentBuffer . Length ;
36+ public readonly bool Empty => _nextEndIndex == _currentBuffer . Length ;
3737
3838 public void InsertFront ( scoped ReadOnlySpan < char > span )
3939 {
@@ -60,13 +60,13 @@ public void InsertFront(scoped ReadOnlySpan<char> span)
6060 var newBuffer = s_arrayPool . Rent ( sizeToRent ) ;
6161 _fallbackSequenceSegment = new ( newBuffer ) ;
6262
63- _nextEndIndex = newBuffer . Length - _currentBuffer . Length ;
64- _currentBuffer . CopyTo ( newBuffer . AsSpan ( ) [ _nextEndIndex ..] ) ;
65- _currentBuffer = newBuffer ;
63+ var newEndIndex = newBuffer . Length - _currentBuffer . Length + _nextEndIndex ;
64+ _currentBuffer [ _nextEndIndex ..] . CopyTo ( newBuffer . AsSpan ( newEndIndex ) ) ;
65+ newEndIndex -= span . Length ;
66+ span . CopyTo ( newBuffer . AsSpan ( newEndIndex ) ) ;
6667
67- startIndex = _nextEndIndex - span . Length ;
68- span . CopyTo ( _currentBuffer [ startIndex ..] ) ;
69- _nextEndIndex = startIndex ;
68+ _currentBuffer = newBuffer ;
69+ _nextEndIndex = newEndIndex ;
7070 }
7171 else
7272 {
0 commit comments