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

◆ NextBytes() [2/2]

unsafe override void System.Random.XoshiroImpl.NextBytes ( Span< byte > buffer)
inline

Definition at line 575 of file Random.cs.

576 {
577 ulong num = _s0;
578 ulong num2 = _s1;
579 ulong num3 = _s2;
580 ulong num4 = _s3;
581 while (buffer.Length >= 8)
582 {
583 Unsafe.WriteUnaligned(ref MemoryMarshal.GetReference(buffer), BitOperations.RotateLeft(num2 * 5, 7) * 9);
584 ulong num5 = num2 << 17;
585 num3 ^= num;
586 num4 ^= num2;
587 num2 ^= num3;
588 num ^= num4;
589 num3 ^= num5;
590 num4 = BitOperations.RotateLeft(num4, 45);
591 buffer = buffer.Slice(8);
592 }
593 if (!buffer.IsEmpty)
594 {
595 ulong num6 = BitOperations.RotateLeft(num2 * 5, 7) * 9;
596 byte* ptr = (byte*)(&num6);
597 for (int i = 0; i < buffer.Length; i++)
598 {
599 buffer[i] = ptr[i];
600 }
601 ulong num7 = num2 << 17;
602 num3 ^= num;
603 num4 ^= num2;
604 num2 ^= num3;
605 num ^= num4;
606 num3 ^= num7;
607 num4 = BitOperations.RotateLeft(num4, 45);
608 }
609 _s0 = num;
610 _s1 = num2;
611 _s2 = num3;
612 _s3 = num4;
613 }
static uint RotateLeft(uint value, int offset)

References System.Random.XoshiroImpl._s0, System.Random.XoshiroImpl._s1, System.Random.XoshiroImpl._s2, System.Random.XoshiroImpl._s3, System.buffer, and System.Numerics.BitOperations.RotateLeft().