aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs')
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs83
1 files changed, 0 insertions, 83 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs b/Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs
deleted file mode 100644
index 104fe578..00000000
--- a/Ryujinx.HLE/HOS/Kernel/Process/KContextIdManager.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-using System;
-using System.Numerics;
-
-namespace Ryujinx.HLE.HOS.Kernel.Process
-{
- class KContextIdManager
- {
- private const int IdMasksCount = 8;
-
- private int[] _idMasks;
-
- private int _nextFreeBitHint;
-
- public KContextIdManager()
- {
- _idMasks = new int[IdMasksCount];
- }
-
- public int GetId()
- {
- lock (_idMasks)
- {
- int id = 0;
-
- if (!TestBit(_nextFreeBitHint))
- {
- id = _nextFreeBitHint;
- }
- else
- {
- for (int index = 0; index < IdMasksCount; index++)
- {
- int mask = _idMasks[index];
-
- int firstFreeBit = BitOperations.LeadingZeroCount((uint)((mask + 1) & ~mask));
-
- if (firstFreeBit < 32)
- {
- int baseBit = index * 32 + 31;
-
- id = baseBit - firstFreeBit;
-
- break;
- }
- else if (index == IdMasksCount - 1)
- {
- throw new InvalidOperationException("Maximum number of Ids reached!");
- }
- }
- }
-
- _nextFreeBitHint = id + 1;
-
- SetBit(id);
-
- return id;
- }
- }
-
- public void PutId(int id)
- {
- lock (_idMasks)
- {
- ClearBit(id);
- }
- }
-
- private bool TestBit(int bit)
- {
- return (_idMasks[_nextFreeBitHint / 32] & (1 << (_nextFreeBitHint & 31))) != 0;
- }
-
- private void SetBit(int bit)
- {
- _idMasks[_nextFreeBitHint / 32] |= (1 << (_nextFreeBitHint & 31));
- }
-
- private void ClearBit(int bit)
- {
- _idMasks[_nextFreeBitHint / 32] &= ~(1 << (_nextFreeBitHint & 31));
- }
- }
-} \ No newline at end of file