public void BasicsWork() { var ints = new Multispan<int>(); Assert.Equal(0, ints.Count); int index1 = ints.AppendNewSegment(10); Assert.Equal(1, ints.Count); Assert.Equal(0, index1); Span<int> segment1 = ints[index1]; Assert.True(segment1.Length >= 10); int index2 = ints.AppendNewSegment(1000); Assert.Equal(2, ints.Count); Assert.Equal(1, index2); Span<int> segment2 = ints[index2]; Assert.True(segment2.Length >= 1000); var totalSize = segment1.Length + segment2.Length; var computedSize = ints.TotalItemCount(); Assert.Equal(totalSize, computedSize); ints.ResizeSegment(0, 20); ints.ResizeSegment(1, 100); segment1 = ints[0]; segment2 = ints[1]; Assert.True(segment1.Length >= 20); Assert.True(segment2.Length >= 100); ints.Dispose(); Assert.Equal(0, ints.Count); }
public void MultispanFormatterBasics() { var data = new Multispan <byte>(); data.AppendNewSegment(10); data.AppendNewSegment(10); data.AppendNewSegment(10); data.AppendNewSegment(10); var formatter = new SequenceFormatter(data, EncodingData.InvariantUtf8); formatter.Append(new string('x', 10)); formatter.Append(new string('x', 8)); formatter.Append(new string('x', 8)); formatter.Append(new string('x', 5)); formatter.Append(new string('x', 5)); var bytesWritten = formatter.TotalWritten; Assert.Equal(36, bytesWritten); foreach (var slice in data) { for (int i = 0; i < slice.Length; i++) { if (bytesWritten == 0) { return; } Assert.Equal((byte)'x', slice[i]); bytesWritten--; } } }
private static void Initialize(ref Multispan <byte> ms) { Assert.Equal(0, ms.TotalItemCount()); ms.AppendNewSegment(10); ms.ResizeSegment(0, 10); ms.AppendNewSegment(20); ms.ResizeSegment(1, 20); ms.AppendNewSegment(30); ms.ResizeSegment(2, 30); Assert.Equal(60, ms.TotalItemCount()); }
private static void Initialize(ref Multispan<byte> ms) { Assert.Equal(0, ms.TotalItemCount()); ms.AppendNewSegment(10); ms.ResizeSegment(0, 10); ms.AppendNewSegment(20); ms.ResizeSegment(1, 20); ms.AppendNewSegment(30); ms.ResizeSegment(2, 30); Assert.Equal(60, ms.TotalItemCount()); }
void IFormatter.ResizeBuffer() { var index = _buffer.AppendNewSegment(_segmentSize); _lastFull = _buffer.Last; _buffer.ResizeSegment(index, 0); }
public MultispanFormatter(Multispan<byte> buffer, int segmentSize, FormattingData formattingData) { _formattingData = formattingData; _segmentSize = segmentSize; _buffer = buffer; int index = _buffer.AppendNewSegment(_segmentSize); // TODO: is this the right thing to do? Should Multispan be resilient to empty segment list? _lastFull = _buffer.Last; _buffer.ResizeSegment(index, 0); }
public MultispanFormatter(Multispan <byte> buffer, int segmentSize, EncodingData encoding) { _encoding = encoding; _segmentSize = segmentSize; _buffer = buffer; int index = _buffer.AppendNewSegment(_segmentSize); // TODO: is this the right thing to do? Should Multispan be resilient to empty segment list? _lastFull = _buffer.Last; _buffer.ResizeSegment(index, 0); }
public static Multispan <byte> ToMultispan(params string[] sections) { var result = new Multispan <byte>(); for (int i = 0; i < sections.Length; i++) { var bytes = new Utf8String(sections[i]).Bytes.CreateArray(); result.AppendNewSegment(bytes.Length); result.Last.Set(bytes); result.ResizeSegment(i, bytes.Length); } return(result); }
void IFormatter.ResizeBuffer(int desiredFreeBytesHint) { var newSize = _segmentSize; if (desiredFreeBytesHint != -1) { newSize = desiredFreeBytesHint; } var index = _buffer.AppendNewSegment(newSize); _lastFull = _buffer.Last; _buffer.ResizeSegment(index, 0); }
public static Multispan <byte> ToMultispan(params string[] sections) { var result = new Multispan <byte>(); for (int i = 0; i < sections.Length; i++) { var bytes = Encoding.UTF8.GetBytes(sections[i]); result.AppendNewSegment(bytes.Length); result.Last.Set(bytes); result.ResizeSegment(i, bytes.Length); } return(result); }
public void BasicsWork() { var ints = new Multispan <int>(); Assert.Equal(0, ints.Count); int index1 = ints.AppendNewSegment(10); Assert.Equal(1, ints.Count); Assert.Equal(0, index1); Span <int> segment1 = ints[index1]; Assert.True(segment1.Length >= 10); int index2 = ints.AppendNewSegment(1000); Assert.Equal(2, ints.Count); Assert.Equal(1, index2); Span <int> segment2 = ints[index2]; Assert.True(segment2.Length >= 1000); var totalSize = segment1.Length + segment2.Length; var computedSize = ints.TotalItemCount(); Assert.Equal(totalSize, computedSize); ints.ResizeSegment(0, 20); ints.ResizeSegment(1, 100); segment1 = ints[0]; segment2 = ints[1]; Assert.True(segment1.Length >= 20); Assert.True(segment2.Length >= 100); ints.Dispose(); Assert.Equal(0, ints.Count); }
public void SingleSpanMultispanBasics() { var ints = new Multispan<int>(); Assert.Equal(0, ints.Count); int index1 = ints.AppendNewSegment(10); Assert.Equal(1, ints.Count); Assert.Equal(0, index1); Span<int> segment1 = ints[index1]; Assert.True(segment1.Length >= 10); var sliced = ints.Slice(1); ints.Dispose(); Assert.Equal(0, ints.Count); }
public void SingleSpanMultispanBasics() { var ints = new Multispan <int>(); Assert.Equal(0, ints.Count); int index1 = ints.AppendNewSegment(10); Assert.Equal(1, ints.Count); Assert.Equal(0, index1); Span <int> segment1 = ints[index1]; Assert.True(segment1.Length >= 10); var sliced = ints.Slice(1); ints.Dispose(); Assert.Equal(0, ints.Count); }
public static Multispan<byte> ToMultispan(params string[] sections) { var result = new Multispan<byte>(); for (int i = 0; i < sections.Length; i++) { var bytes = Encoding.UTF8.GetBytes(sections[i]); result.AppendNewSegment(bytes.Length); result.Last.Set(bytes); result.ResizeSegment(i, bytes.Length); } return result; }