Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Memmove()

static void System.Buffer.Memmove ( ref byte dest,
ref byte src,
nuint len )
inlinestaticpackage

Definition at line 215 of file Buffer.cs.

216 {
217 if ((nuint)(nint)Unsafe.ByteOffset(ref src, ref dest) >= len && (nuint)(nint)Unsafe.ByteOffset(ref dest, ref src) >= len)
218 {
219 ref byte source = ref Unsafe.Add(ref src, (nint)len);
220 ref byte source2 = ref Unsafe.Add(ref dest, (nint)len);
221 if (len > 16)
222 {
223 if (len > 64)
224 {
225 if (len > 2048)
226 {
227 goto IL_01db;
228 }
229 nuint num = len >> 6;
230 do
231 {
232 Unsafe.As<byte, Block64>(ref dest) = Unsafe.As<byte, Block64>(ref src);
233 dest = ref Unsafe.Add(ref dest, 64);
234 src = ref Unsafe.Add(ref src, 64);
235 num--;
236 }
237 while (num != 0);
238 len %= 64;
239 if (len <= 16)
240 {
241 Unsafe.As<byte, Block16>(ref Unsafe.Add(ref source2, -16)) = Unsafe.As<byte, Block16>(ref Unsafe.Add(ref source, -16));
242 return;
243 }
244 }
245 Unsafe.As<byte, Block16>(ref dest) = Unsafe.As<byte, Block16>(ref src);
246 if (len > 32)
247 {
248 Unsafe.As<byte, Block16>(ref Unsafe.Add(ref dest, 16)) = Unsafe.As<byte, Block16>(ref Unsafe.Add(ref src, 16));
249 if (len > 48)
250 {
251 Unsafe.As<byte, Block16>(ref Unsafe.Add(ref dest, 32)) = Unsafe.As<byte, Block16>(ref Unsafe.Add(ref src, 32));
252 }
253 }
254 Unsafe.As<byte, Block16>(ref Unsafe.Add(ref source2, -16)) = Unsafe.As<byte, Block16>(ref Unsafe.Add(ref source, -16));
255 }
256 else if ((len & 0x18) != 0)
257 {
258 Unsafe.As<byte, long>(ref dest) = Unsafe.As<byte, long>(ref src);
259 Unsafe.As<byte, long>(ref Unsafe.Add(ref source2, -8)) = Unsafe.As<byte, long>(ref Unsafe.Add(ref source, -8));
260 }
261 else if ((len & 4) != 0)
262 {
263 Unsafe.As<byte, int>(ref dest) = Unsafe.As<byte, int>(ref src);
264 Unsafe.As<byte, int>(ref Unsafe.Add(ref source2, -4)) = Unsafe.As<byte, int>(ref Unsafe.Add(ref source, -4));
265 }
266 else if (len != 0)
267 {
268 dest = src;
269 if ((len & 2) != 0)
270 {
271 Unsafe.As<byte, short>(ref Unsafe.Add(ref source2, -2)) = Unsafe.As<byte, short>(ref Unsafe.Add(ref source, -2));
272 }
273 }
274 return;
275 }
276 if (Unsafe.AreSame(ref dest, ref src))
277 {
278 return;
279 }
280 goto IL_01db;
281 IL_01db:
282 _Memmove(ref dest, ref src, len);
283 }
static unsafe void _Memmove(ref byte dest, ref byte src, nuint len)
Definition Buffer.cs:286

References System.Buffer._Memmove(), System.len, and System.source.

Referenced by System.Text.StringBuilder.Append(), System.Buffer.BlockCopy(), System.StubHelpers.AsAnyMarshaler.ConvertStringToNative(), System.StubHelpers.AnsiBSTRMarshaler.ConvertToNative(), System.StubHelpers.CSTRMarshaler.ConvertToNative(), System.StubHelpers.VBByValStrMarshaler.ConvertToNative(), System.StubHelpers.BSTRMarshaler.ConvertToNative(), System.Array.Copy(), System.Array.Copy(), System.Array.Copy(), System.String.Copy(), System.String.CopyTo(), System.String.CopyTo(), System.ReadOnlySpan< T >.CopyTo(), System.Span< T >.CopyTo(), System.String.Ctor(), System.String.Ctor(), System.String.Ctor(), System.String.Ctor(), System.String.Ctor(), System.String.FillStringChecked(), System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray< T >(), System.String.Insert(), System.String.InternalCopy(), System.String.InternalSubString(), System.Object.MemberwiseClone(), System.Buffer.Memcpy(), System.Buffer.Memcpy(), System.Buffer.Memmove< T >(), System.Buffer.MemoryCopy(), System.Buffer.MemoryCopy(), System.String.PadLeft(), System.String.PadRight(), System.Runtime.InteropServices.SafeBuffer.Read< T >(), System.IO.UnmanagedMemoryStream.ReadCore(), System.Runtime.InteropServices.SafeBuffer.ReadSpan< T >(), System.String.Remove(), System.String.Replace(), System.Array.Resize< T >(), System.Number.BigInteger.SetValue(), System.ReadOnlySpan< T >.ToArray(), System.Span< T >.ToArray(), System.String.ToCharArray(), System.String.ToCharArray(), System.Text.StringBuilder.ToString(), System.String.TryCopyTo(), System.ReadOnlySpan< T >.TryCopyTo(), System.Span< T >.TryCopyTo(), System.Runtime.InteropServices.SafeBuffer.Write< T >(), System.IO.UnmanagedMemoryStream.WriteCore(), and System.Runtime.InteropServices.SafeBuffer.WriteSpan< T >().