Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
SegmentStringBuilder.cs
Go to the documentation of this file.
1
using
System.Buffers
;
2
using
System.Diagnostics
;
3
using
System.Runtime.CompilerServices
;
4
5
namespace
System.Text
;
6
7
[DebuggerDisplay(
"Count = {_count}"
)]
8
internal
struct
SegmentStringBuilder
9
{
10
private
ReadOnlyMemory<char>
[]
_array
;
11
12
private
int
_count
;
13
14
public
int
Count
=>
_count
;
15
16
public
static
SegmentStringBuilder
Create
()
17
{
18
SegmentStringBuilder
result =
default
(
SegmentStringBuilder
);
19
result._array =
Array
.Empty<
ReadOnlyMemory<char>
>();
20
return
result;
21
}
22
23
[MethodImpl(
MethodImplOptions
.AggressiveInlining)]
24
public
void
Add
(
ReadOnlyMemory<char>
segment)
25
{
26
ReadOnlyMemory<char>
[]
array
=
_array
;
27
int
count
=
_count
;
28
if
((uint)
count
< (uint)
array
.Length)
29
{
30
array
[
count
] = segment;
31
_count
=
count
+ 1;
32
}
33
else
34
{
35
GrowAndAdd
(segment);
36
}
37
}
38
39
[MethodImpl(
MethodImplOptions
.NoInlining)]
40
private
void
GrowAndAdd
(
ReadOnlyMemory<char>
segment)
41
{
42
ReadOnlyMemory<char>
[]
array
=
_array
;
43
int
minimumLength = ((array.Length == 0) ? 256 : (array.Length * 2));
44
ReadOnlyMemory<char>
[] array2 = (
_array
=
ArrayPool<ReadOnlyMemory<char>
>.
Shared
.Rent(minimumLength));
45
Array
.
Copy
(
array
, array2,
_count
);
46
ArrayPool<ReadOnlyMemory<char>
>.
Shared
.Return(
array
, clearArray:
true
);
47
array2[
_count
++] = segment;
48
}
49
50
public
Span<ReadOnlyMemory<char>
>
AsSpan
()
51
{
52
return
new
Span<ReadOnlyMemory<char>
>(
_array
, 0,
_count
);
53
}
54
55
public
override
string
ToString
()
56
{
57
ReadOnlyMemory<char>
[]
array
=
_array
;
58
Span<ReadOnlyMemory<char>
> span =
new
Span<ReadOnlyMemory<char>
>(
array
, 0,
_count
);
59
int
num = 0;
60
for
(
int
i = 0; i < span.
Length
; i++)
61
{
62
num += span[i].
Length
;
63
}
64
string
result =
string
.Create(num,
this
, delegate(
Span<char>
dest,
SegmentStringBuilder
builder)
65
{
66
Span<ReadOnlyMemory<char>
> span2 = builder.
AsSpan
();
67
for
(
int
j = 0; j < span2.
Length
; j++)
68
{
69
ReadOnlySpan<char>
span3 = span2[j].
Span
;
70
span3.
CopyTo
(dest);
71
dest = dest.
Slice
(span3.
Length
);
72
}
73
});
74
span.
Clear
();
75
this
=
default
(
SegmentStringBuilder
);
76
ArrayPool<ReadOnlyMemory<char>
>.
Shared
.Return(
array
);
77
return
result;
78
}
79
}
System.Array.Copy
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
Definition
Array.cs:624
System.Array
Definition
Array.cs:16
System.Buffers.ArrayPool.Shared
static ArrayPool< T > Shared
Definition
ArrayPool.cs:7
System.Buffers.ArrayPool
Definition
ArrayPool.cs:4
System.Buffers
Definition
Base64.cs:7
System.Diagnostics
Definition
AggregationManager.cs:6
System.Runtime.CompilerServices.MethodImplOptions
MethodImplOptions
Definition
MethodImplOptions.cs:5
System.Runtime.CompilerServices
Definition
NullablePublicOnlyAttribute.cs:3
System.Text
Definition
ConsoleEncoding.cs:1
System.ExceptionArgument.count
@ count
System.ExceptionArgument.array
@ array
System.ReadOnlyMemory
Definition
ReadOnlyMemory.cs:14
System.ReadOnlySpan.Length
int Length
Definition
ReadOnlySpan.cs:70
System.ReadOnlySpan.CopyTo
void CopyTo(Span< T > destination)
Definition
ReadOnlySpan.cs:190
System.ReadOnlySpan
Definition
ReadOnlySpan.cs:14
System.Span.Span
Span(T[]? array)
Definition
Span.cs:90
System.Span.Slice
Span< T > Slice(int start)
Definition
Span.cs:271
System.Span.Clear
unsafe void Clear()
Definition
Span.cs:198
System.Span.Length
int Length
Definition
Span.cs:70
System.Span
Definition
Span.cs:14
System.Text.SegmentStringBuilder.Add
void Add(ReadOnlyMemory< char > segment)
Definition
SegmentStringBuilder.cs:24
System.Text.SegmentStringBuilder.Count
int Count
Definition
SegmentStringBuilder.cs:14
System.Text.SegmentStringBuilder.Create
static SegmentStringBuilder Create()
Definition
SegmentStringBuilder.cs:16
System.Text.SegmentStringBuilder.ToString
override string ToString()
Definition
SegmentStringBuilder.cs:55
System.Text.SegmentStringBuilder.AsSpan
Span< ReadOnlyMemory< char > > AsSpan()
Definition
SegmentStringBuilder.cs:50
System.Text.SegmentStringBuilder._array
ReadOnlyMemory< char >[] _array
Definition
SegmentStringBuilder.cs:10
System.Text.SegmentStringBuilder._count
int _count
Definition
SegmentStringBuilder.cs:12
System.Text.SegmentStringBuilder.GrowAndAdd
void GrowAndAdd(ReadOnlyMemory< char > segment)
Definition
SegmentStringBuilder.cs:40
System.Text.SegmentStringBuilder
Definition
SegmentStringBuilder.cs:9
source
System.Text.RegularExpressions
System.Text
SegmentStringBuilder.cs
Generated by
1.10.0