Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
RangeManager.cs
Go to the documentation of this file.
2
3internal sealed class RangeManager
4{
5 internal readonly IndexRange[] _indexRanges;
6
7 internal readonly bool _use32BitCurrentIndex;
8
10
11 internal long _nStep;
12
13 internal RangeManager(long nFromInclusive, long nToExclusive, long nStep, int nNumExpectedWorkers)
14 {
16 _nStep = nStep;
17 if (nNumExpectedWorkers == 1)
18 {
19 nNumExpectedWorkers = 2;
20 }
21 ulong num = (ulong)(nToExclusive - nFromInclusive);
22 ulong num2 = num / (ulong)nNumExpectedWorkers;
23 num2 -= num2 % (ulong)nStep;
24 if (num2 == 0L)
25 {
26 num2 = (ulong)nStep;
27 }
28 int num3 = (int)(num / num2);
29 if (num % num2 != 0L)
30 {
31 num3++;
32 }
33 long num4 = (long)num2;
34 _use32BitCurrentIndex = IntPtr.Size == 4 && num4 <= int.MaxValue;
35 _indexRanges = new IndexRange[num3];
36 long num5 = nFromInclusive;
37 for (int i = 0; i < num3; i++)
38 {
42 num5 += num4;
43 if (num5 < num5 - num4 || num5 > nToExclusive)
44 {
45 num5 = nToExclusive;
46 }
48 }
49 }
50
52 {
53 int nInitialRange = (Interlocked.Increment(ref _nCurrentIndexRangeToAssign) - 1) % _indexRanges.Length;
54 return new RangeWorker(_indexRanges, nInitialRange, _nStep, _use32BitCurrentIndex);
55 }
56}
static int Increment(ref int location)
RangeManager(long nFromInclusive, long nToExclusive, long nStep, int nNumExpectedWorkers)
readonly IndexRange[] _indexRanges
volatile StrongBox< long > _nSharedCurrentIndexOffset
Definition IndexRange.cs:13