aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.Memory/WindowsShared/MappingTree.cs20
-rw-r--r--Ryujinx.Memory/WindowsShared/PlaceholderManager.cs11
2 files changed, 24 insertions, 7 deletions
diff --git a/Ryujinx.Memory/WindowsShared/MappingTree.cs b/Ryujinx.Memory/WindowsShared/MappingTree.cs
index 7a18d457..97758c2b 100644
--- a/Ryujinx.Memory/WindowsShared/MappingTree.cs
+++ b/Ryujinx.Memory/WindowsShared/MappingTree.cs
@@ -13,7 +13,7 @@ namespace Ryujinx.Memory.WindowsShared
public int GetNodes(ulong start, ulong end, ref RangeNode<T>[] overlaps, int overlapCount = 0)
{
- RangeNode<T> node = GetNode(new RangeNode<T>(start, start + 1UL, default));
+ RangeNode<T> node = this.GetNodeByKey(start);
for (; node != null; node = node.Successor)
{
@@ -34,7 +34,7 @@ namespace Ryujinx.Memory.WindowsShared
}
}
- class RangeNode<T> : IntrusiveRedBlackTreeNode<RangeNode<T>>, IComparable<RangeNode<T>>
+ class RangeNode<T> : IntrusiveRedBlackTreeNode<RangeNode<T>>, IComparable<RangeNode<T>>, IComparable<ulong>
{
public ulong Start { get; }
public ulong End { get; private set; }
@@ -67,5 +67,21 @@ namespace Ryujinx.Memory.WindowsShared
return 1;
}
}
+
+ public int CompareTo(ulong address)
+ {
+ if (address < Start)
+ {
+ return 1;
+ }
+ else if (address <= End - 1UL)
+ {
+ return 0;
+ }
+ else
+ {
+ return -1;
+ }
+ }
}
} \ No newline at end of file
diff --git a/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs b/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs
index 8624f817..a17fea5e 100644
--- a/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs
+++ b/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs
@@ -1,3 +1,4 @@
+using Ryujinx.Common.Collections;
using Ryujinx.Common.Memory.PartialUnmaps;
using System;
using System.Diagnostics;
@@ -88,7 +89,7 @@ namespace Ryujinx.Memory.WindowsShared
lock (_mappings)
{
- RangeNode<ulong> node = _mappings.GetNode(new RangeNode<ulong>(address, address + 1UL, default));
+ RangeNode<ulong> node = _mappings.GetNodeByKey(address);
RangeNode<ulong> successorNode;
for (; node != null; node = successorNode)
@@ -379,7 +380,7 @@ namespace Ryujinx.Memory.WindowsShared
lock (_mappings)
{
- RangeNode<ulong> node = _mappings.GetNode(new RangeNode<ulong>(address, address + 1UL, default));
+ RangeNode<ulong> node = _mappings.GetNodeByKey(address);
if (node == null)
{
@@ -481,7 +482,7 @@ namespace Ryujinx.Memory.WindowsShared
lock (_mappings)
{
- RangeNode<ulong> node = _mappings.GetNode(new RangeNode<ulong>(reprotectAddress, reprotectAddress + 1UL, default));
+ RangeNode<ulong> node = _mappings.GetNodeByKey(reprotectAddress);
RangeNode<ulong> successorNode;
for (; node != null; node = successorNode)
@@ -580,7 +581,7 @@ namespace Ryujinx.Memory.WindowsShared
lock (_protections)
{
- RangeNode<MemoryPermission> node = _protections.GetNode(new RangeNode<MemoryPermission>(address, address + 1UL, default));
+ RangeNode<MemoryPermission> node = _protections.GetNodeByKey(address);
if (node != null &&
node.Start <= address &&
@@ -651,7 +652,7 @@ namespace Ryujinx.Memory.WindowsShared
lock (_protections)
{
- RangeNode<MemoryPermission> node = _protections.GetNode(new RangeNode<MemoryPermission>(address, address + 1UL, default));
+ RangeNode<MemoryPermission> node = _protections.GetNodeByKey(address);
RangeNode<MemoryPermission> successorNode;
for (; node != null; node = successorNode)