Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
HashHelpers.cs
Go to the documentation of this file.
4
5namespace System.Collections;
6
7internal static class HashHelpers
8{
9 private static readonly int[] s_primes = new int[72]
10 {
11 3, 7, 11, 17, 23, 29, 37, 47, 59, 71,
12 89, 107, 131, 163, 197, 239, 293, 353, 431, 521,
13 631, 761, 919, 1103, 1327, 1597, 1931, 2333, 2801, 3371,
14 4049, 4861, 5839, 7013, 8419, 10103, 12143, 14591, 17519, 21023,
15 25229, 30293, 36353, 43627, 52361, 62851, 75431, 90523, 108631, 130363,
16 156437, 187751, 225307, 270371, 324449, 389357, 467237, 560689, 672827, 807403,
17 968897, 1162687, 1395263, 1674319, 2009191, 2411033, 2893249, 3471899, 4166287, 4999559,
18 5999471, 7199369
19 };
20
22
34
35 public static bool IsPrime(int candidate)
36 {
37 if (((uint)candidate & (true ? 1u : 0u)) != 0)
38 {
39 int num = (int)Math.Sqrt(candidate);
40 for (int i = 3; i <= num; i += 2)
41 {
42 if (candidate % i == 0)
43 {
44 return false;
45 }
46 }
47 return true;
48 }
49 return candidate == 2;
50 }
51
52 public static int GetPrime(int min)
53 {
54 if (min < 0)
55 {
57 }
58 int[] array = s_primes;
59 foreach (int num in array)
60 {
61 if (num >= min)
62 {
63 return num;
64 }
65 }
66 for (int j = min | 1; j < int.MaxValue; j += 2)
67 {
68 if (IsPrime(j) && (j - 1) % 101 != 0)
69 {
70 return j;
71 }
72 }
73 return min;
74 }
75
76 public static int ExpandPrime(int oldSize)
77 {
78 int num = 2 * oldSize;
79 if ((uint)num > 2147483587u && 2147483587 > oldSize)
80 {
81 return 2147483587;
82 }
83 return GetPrime(num);
84 }
85
86 public static ulong GetFastModMultiplier(uint divisor)
87 {
88 return ulong.MaxValue / (ulong)divisor + 1;
89 }
90
91 [MethodImpl(MethodImplOptions.AggressiveInlining)]
92 public static uint FastMod(uint value, uint divisor, ulong multiplier)
93 {
94 return (uint)(((multiplier * value >> 32) + 1) * divisor >> 32);
95 }
96}
static int GetPrime(int min)
static ConditionalWeakTable< object, SerializationInfo > s_serializationInfoTable
static readonly int[] s_primes
Definition HashHelpers.cs:9
static uint FastMod(uint value, uint divisor, ulong multiplier)
static int ExpandPrime(int oldSize)
static bool IsPrime(int candidate)
static ulong GetFastModMultiplier(uint divisor)
static ConditionalWeakTable< object, SerializationInfo > SerializationInfoTable
static double Sqrt(double d)
static string Arg_HTCapacityOverflow
Definition SR.cs:186
Definition SR.cs:7
static int CompareExchange(ref int location1, int value, int comparand)