forked from ReClassNET/ReClass.NET
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIntPtrExtensions.cs
More file actions
119 lines (108 loc) · 2.48 KB
/
Copy pathIntPtrExtensions.cs
File metadata and controls
119 lines (108 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
using System;
using System.Diagnostics;
using System.Diagnostics.Contracts;
namespace ReClassNET.Extensions
{
public static class IntPtrExtension
{
[Pure]
[DebuggerStepThrough]
public static bool IsNull(this IntPtr ptr)
{
return ptr == IntPtr.Zero;
}
[Pure]
[DebuggerStepThrough]
public static bool MayBeValid(this IntPtr ptr)
{
#if RECLASSNET64
return ptr.InRange((IntPtr)0x10000, (IntPtr)long.MaxValue);
#else
return ptr.InRange((IntPtr)0x10000, (IntPtr)int.MaxValue);
#endif
}
[Pure]
[DebuggerStepThrough]
public static IntPtr Add(this IntPtr lhs, IntPtr rhs)
{
#if RECLASSNET64
return new IntPtr(lhs.ToInt64() + rhs.ToInt64());
#else
return new IntPtr(lhs.ToInt32() + rhs.ToInt32());
#endif
}
[Pure]
[DebuggerStepThrough]
public static IntPtr Sub(this IntPtr lhs, IntPtr rhs)
{
#if RECLASSNET64
return new IntPtr(lhs.ToInt64() - rhs.ToInt64());
#else
return new IntPtr(lhs.ToInt32() - rhs.ToInt32());
#endif
}
[Pure]
[DebuggerStepThrough]
public static IntPtr Mul(this IntPtr lhs, IntPtr rhs)
{
#if RECLASSNET64
return new IntPtr(lhs.ToInt64() * rhs.ToInt64());
#else
return new IntPtr(lhs.ToInt32() * rhs.ToInt32());
#endif
}
[Pure]
[DebuggerStepThrough]
public static IntPtr Div(this IntPtr lhs, IntPtr rhs)
{
Contract.Requires(!rhs.IsNull());
#if RECLASSNET64
return new IntPtr(lhs.ToInt64() / rhs.ToInt64());
#else
return new IntPtr(lhs.ToInt32() / rhs.ToInt32());
#endif
}
[Pure]
[DebuggerStepThrough]
public static int Mod(this IntPtr lhs, int mod)
{
#if RECLASSNET64
return (int)(lhs.ToInt64() % mod);
#else
return lhs.ToInt32() % mod;
#endif
}
[Pure]
[DebuggerStepThrough]
public static bool InRange(this IntPtr address, IntPtr start, IntPtr end)
{
#if RECLASSNET64
var val = (ulong)address.ToInt64();
return (ulong)start.ToInt64() <= val && val <= (ulong)end.ToInt64();
#else
var val = (uint)address.ToInt32();
return (uint)start.ToInt32() <= val && val <= (uint)end.ToInt32();
#endif
}
[Pure]
[DebuggerStepThrough]
public static int CompareTo(this IntPtr lhs, IntPtr rhs)
{
#if RECLASSNET64
return ((ulong)lhs.ToInt64()).CompareTo((ulong)rhs.ToInt64());
#else
return ((uint)lhs.ToInt32()).CompareTo((uint)rhs.ToInt32());
#endif
}
[Pure]
[DebuggerStepThrough]
public static int CompareToRange(this IntPtr address, IntPtr start, IntPtr end)
{
if (InRange(address, start, end))
{
return 0;
}
return CompareTo(address, start);
}
}
}