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

◆ ComputeHash32() [2/2]

static int System.Marvin.ComputeHash32 ( ref byte data,
uint count,
uint p0,
uint p1 )
inlinestatic

Definition at line 22 of file Marvin.cs.

23 {
24 uint num;
25 if (count < 8)
26 {
27 if (count < 4)
28 {
29 _ = BitConverter.IsLittleEndian;
30 num = 128u;
31 if ((count & (true ? 1u : 0u)) != 0)
32 {
33 num = Unsafe.AddByteOffset(ref data, (nuint)count & (nuint)2u);
34 _ = BitConverter.IsLittleEndian;
35 num |= 0x8000u;
36 }
37 if ((count & 2u) != 0)
38 {
39 _ = BitConverter.IsLittleEndian;
40 num <<= 16;
41 num |= Unsafe.ReadUnaligned<ushort>(ref data);
42 }
43 goto IL_00a6;
44 }
45 }
46 else
47 {
48 uint num2 = count / 8;
49 do
50 {
51 p0 += Unsafe.ReadUnaligned<uint>(ref data);
52 uint num3 = Unsafe.ReadUnaligned<uint>(ref Unsafe.AddByteOffset(ref data, 4u));
53 Block(ref p0, ref p1);
54 p0 += num3;
55 Block(ref p0, ref p1);
56 data = ref Unsafe.AddByteOffset(ref data, 8u);
57 }
58 while (--num2 != 0);
59 if ((count & 4) == 0)
60 {
61 goto IL_006a;
62 }
63 }
64 p0 += Unsafe.ReadUnaligned<uint>(ref data);
65 Block(ref p0, ref p1);
66 goto IL_006a;
67 IL_00a6:
68 p0 += num;
69 Block(ref p0, ref p1);
70 Block(ref p0, ref p1);
71 return (int)(p1 ^ p0);
72 IL_006a:
73 num = Unsafe.ReadUnaligned<uint>(ref Unsafe.Add(ref Unsafe.AddByteOffset(ref data, (nuint)count & (nuint)7u), -4));
74 count = ~count << 3;
75 _ = BitConverter.IsLittleEndian;
76 num >>= 8;
77 num |= 0x80000000u;
78 num >>= (int)(count & 0x1F);
79 goto IL_00a6;
80 }
static void Block(ref uint rp0, ref uint rp1)
Definition Marvin.cs:83

References System.Marvin.Block(), System.count, and System.BitConverter.IsLittleEndian.