Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
CheckSumAndSizeWriteStream.cs
Go to the documentation of this file.
4
6
7internal sealed class CheckSumAndSizeWriteStream : Stream
8{
9 private readonly Stream _baseStream;
10
11 private readonly Stream _baseBaseStream;
12
13 private long _position;
14
15 private uint _checksum;
16
17 private readonly bool _leaveOpenOnClose;
18
19 private readonly bool _canWrite;
20
21 private bool _isDisposed;
22
23 private bool _everWritten;
24
25 private long _initialPosition;
26
28
29 private readonly EventHandler _onClose;
30
31 private readonly Action<long, long, uint, Stream, ZipArchiveEntry, EventHandler> _saveCrcAndSizes;
32
33 public override long Length
34 {
35 get
36 {
39 }
40 }
41
42 public override long Position
43 {
44 get
45 {
47 return _position;
48 }
49 set
50 {
53 }
54 }
55
56 public override bool CanRead => false;
57
58 public override bool CanSeek => false;
59
60 public override bool CanWrite => _canWrite;
61
62 public CheckSumAndSizeWriteStream(Stream baseStream, Stream baseBaseStream, bool leaveOpenOnClose, ZipArchiveEntry entry, EventHandler onClose, Action<long, long, uint, Stream, ZipArchiveEntry, EventHandler> saveCrcAndSizes)
63 {
64 _baseStream = baseStream;
65 _baseBaseStream = baseBaseStream;
66 _position = 0L;
67 _checksum = 0u;
68 _leaveOpenOnClose = leaveOpenOnClose;
69 _canWrite = true;
70 _isDisposed = false;
72 _zipArchiveEntry = entry;
73 _onClose = onClose;
74 _saveCrcAndSizes = saveCrcAndSizes;
75 }
76
77 private void ThrowIfDisposed()
78 {
79 if (_isDisposed)
80 {
82 }
83 }
84
85 public override int Read(byte[] buffer, int offset, int count)
86 {
89 }
90
91 public override long Seek(long offset, SeekOrigin origin)
92 {
95 }
96
97 public override void SetLength(long value)
98 {
101 }
102
103 public override void Write(byte[] buffer, int offset, int count)
104 {
107 if (count != 0)
108 {
109 if (!_everWritten)
110 {
112 _everWritten = true;
113 }
116 _position += count;
117 }
118 }
119
120 public override void Write(ReadOnlySpan<byte> source)
121 {
123 if (source.Length != 0)
124 {
125 if (!_everWritten)
126 {
128 _everWritten = true;
129 }
132 _position += source.Length;
133 }
134 }
135
136 public override void WriteByte(byte value)
137 {
138 Write(MemoryMarshal.CreateReadOnlySpan(ref value, 1));
139 }
140
146
148 {
150 if (buffer.IsEmpty)
151 {
152 return default(ValueTask);
153 }
154 return Core(buffer, cancellationToken);
156 {
157 if (!_everWritten)
158 {
160 _everWritten = true;
161 }
163 await _baseStream.WriteAsync(buffer, cancellationToken).ConfigureAwait(continueOnCapturedContext: false);
164 _position += buffer.Length;
165 }
166 }
167
168 public override void Flush()
169 {
172 }
173
179
180 protected override void Dispose(bool disposing)
181 {
182 if (disposing && !_isDisposed)
183 {
184 if (!_everWritten)
185 {
187 }
189 {
191 }
193 _isDisposed = true;
194 }
195 base.Dispose(disposing);
196 }
197}
override void Write(ReadOnlySpan< byte > source)
override void Write(byte[] buffer, int offset, int count)
readonly Action< long, long, uint, Stream, ZipArchiveEntry, EventHandler > _saveCrcAndSizes
CheckSumAndSizeWriteStream(Stream baseStream, Stream baseBaseStream, bool leaveOpenOnClose, ZipArchiveEntry entry, EventHandler onClose, Action< long, long, uint, Stream, ZipArchiveEntry, EventHandler > saveCrcAndSizes)
override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
override Task FlushAsync(CancellationToken cancellationToken)
override long Seek(long offset, SeekOrigin origin)
override int Read(byte[] buffer, int offset, int count)
override ValueTask WriteAsync(ReadOnlyMemory< byte > buffer, CancellationToken cancellationToken=default(CancellationToken))
static unsafe uint UpdateCrc32(uint crc32, byte[] buffer, int offset, int length)
Definition Crc32Helper.cs:7
Task FlushAsync()
Definition Stream.cs:669
static void ValidateBufferArguments(byte[] buffer, int offset, int count)
Definition Stream.cs:1044
Task WriteAsync(byte[] buffer, int offset, int count)
Definition Stream.cs:914
void Dispose()
Definition Stream.cs:639
void Write(byte[] buffer, int offset, int count)
static string SeekingNotSupported
Definition SR.cs:114
static string SetLengthRequiresSeekingAndWriting
Definition SR.cs:116
static string ReadingNotSupported
Definition SR.cs:108
static string HiddenStreamName
Definition SR.cs:100
Definition SR.cs:7
new ConfiguredTaskAwaitable< TResult > ConfigureAwait(bool continueOnCapturedContext)
Definition Task.cs:226