6 namespace SiliconStudio.Core.IO
16 protected const int NativeStreamBufferSize = 1024;
20 var temporaryBuffer = nativeStreamBuffer;
21 if (temporaryBuffer == null)
22 temporaryBuffer = nativeStreamBuffer =
new byte[NativeStreamBufferSize];
24 int currentReadSize =
Read(temporaryBuffer, 0,
sizeof(ushort));
25 if (currentReadSize !=
sizeof(ushort))
26 throw new InvalidOperationException(
"Reached end of stream.");
28 fixed (byte* temporaryBufferStart = temporaryBuffer)
30 return *((ushort*)temporaryBufferStart);
36 var temporaryBuffer = nativeStreamBuffer;
37 if (temporaryBuffer == null)
38 temporaryBuffer = nativeStreamBuffer =
new byte[NativeStreamBufferSize];
40 int currentReadSize =
Read(temporaryBuffer, 0,
sizeof(uint));
41 if (currentReadSize !=
sizeof(uint))
42 throw new InvalidOperationException(
"Reached end of stream.");
44 fixed (byte* temporaryBufferStart = temporaryBuffer)
46 return *((uint*)temporaryBufferStart);
52 var temporaryBuffer = nativeStreamBuffer;
53 if (temporaryBuffer == null)
54 temporaryBuffer = nativeStreamBuffer =
new byte[NativeStreamBufferSize];
56 int currentReadSize =
Read(temporaryBuffer, 0,
sizeof(ulong));
57 if (currentReadSize !=
sizeof(ulong))
58 throw new InvalidOperationException(
"Reached end of stream.");
60 fixed (byte* temporaryBufferStart = temporaryBuffer)
62 return *((ulong*)temporaryBufferStart);
66 public virtual unsafe
void Write(ushort i)
68 var temporaryBuffer = nativeStreamBuffer;
69 if (temporaryBuffer == null)
70 temporaryBuffer = nativeStreamBuffer =
new byte[NativeStreamBufferSize];
72 fixed (byte* temporaryBufferStart = temporaryBuffer)
73 *((ushort*)temporaryBufferStart) = i;
75 Write(temporaryBuffer, 0,
sizeof(ushort));
78 public virtual unsafe
void Write(uint i)
80 var temporaryBuffer = nativeStreamBuffer;
81 if (temporaryBuffer == null)
82 temporaryBuffer = nativeStreamBuffer =
new byte[NativeStreamBufferSize];
84 fixed (byte* temporaryBufferStart = temporaryBuffer)
85 *((uint*)temporaryBufferStart) = i;
87 Write(temporaryBuffer, 0,
sizeof(uint));
90 public virtual unsafe
void Write(ulong i)
92 var temporaryBuffer = nativeStreamBuffer;
93 if (temporaryBuffer == null)
94 temporaryBuffer = nativeStreamBuffer =
new byte[NativeStreamBufferSize];
96 fixed (byte* temporaryBufferStart = temporaryBuffer)
97 *((ulong*)temporaryBufferStart) = i;
99 Write(temporaryBuffer, 0,
sizeof(ulong));
111 var temporaryBuffer = nativeStreamBuffer;
112 if (temporaryBuffer == null)
113 temporaryBuffer = nativeStreamBuffer =
new byte[NativeStreamBufferSize];
117 for (
int offset = 0; offset <
count; offset += NativeStreamBufferSize, buffer += NativeStreamBufferSize)
120 int blockSize = count - offset;
121 if (blockSize > NativeStreamBufferSize)
122 blockSize = NativeStreamBufferSize;
125 int currentReadSize =
Read(temporaryBuffer, 0, blockSize);
126 readSize += currentReadSize;
127 Utilities.Write(buffer, temporaryBuffer, 0, currentReadSize);
130 if (currentReadSize < blockSize)
144 var temporaryBuffer = nativeStreamBuffer;
145 if (temporaryBuffer == null)
146 temporaryBuffer = nativeStreamBuffer =
new byte[NativeStreamBufferSize];
148 for (
int offset = 0; offset <
count; offset += NativeStreamBufferSize, buffer += NativeStreamBufferSize)
151 int blockSize = count - offset;
152 if (blockSize > NativeStreamBufferSize)
153 blockSize = NativeStreamBufferSize;
155 fixed (byte* temporaryBufferStart = temporaryBuffer)
156 Utilities.CopyMemory((IntPtr)temporaryBufferStart, buffer, blockSize);
158 Write(temporaryBuffer, 0, blockSize);
virtual unsafe void Write(IntPtr buffer, int count)
Writes a block of bytes to this stream using data from a buffer.
virtual unsafe ushort ReadUInt16()
byte[] nativeStreamBuffer
virtual unsafe ulong ReadUInt64()
virtual unsafe void Write(uint i)
A Stream with additional methods for native read and write operations using IntPtr.
virtual unsafe void Write(ulong i)
virtual unsafe uint ReadUInt32()
virtual unsafe void Write(ushort i)
virtual int Read(IntPtr buffer, int count)
Reads a block of bytes from the stream and writes the data in a given buffer.