forked from Taritsyn/JavaScriptEngineSwitcher
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJsSourceContext.cs
More file actions
188 lines (166 loc) · 5.86 KB
/
JsSourceContext.cs
File metadata and controls
188 lines (166 loc) · 5.86 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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
using System;
namespace JavaScriptEngineSwitcher.ChakraCore.JsRt
{
/// <summary>
/// The cookie that identifies a script for debugging purposes
/// </summary>
internal struct JsSourceContext : IEquatable<JsSourceContext>
{
/// <summary>
/// The context
/// </summary>
private readonly IntPtr _context;
/// <summary>
/// Gets a empty source context
/// </summary>
public static JsSourceContext None
{
get { return new JsSourceContext(new IntPtr(-1)); }
}
/// <summary>
/// Initializes a new instance of the <see cref="JsSourceContext"/> struct
/// </summary>
/// <param name="context">The context</param>
private JsSourceContext(IntPtr context)
{
_context = context;
}
/// <summary>
/// The equality operator for source contexts
/// </summary>
/// <param name="left">The first source context to compare</param>
/// <param name="right">The second source context to compare</param>
/// <returns>Whether the two source contexts are the same</returns>
public static bool operator ==(JsSourceContext left, JsSourceContext right)
{
return left.Equals(right);
}
/// <summary>
/// The inequality operator for source contexts
/// </summary>
/// <param name="left">The first source context to compare</param>
/// <param name="right">The second source context to compare</param>
/// <returns>Whether the two source contexts are not the same</returns>
public static bool operator !=(JsSourceContext left, JsSourceContext right)
{
return !left.Equals(right);
}
/// <summary>
/// Subtracts a offset from the value of the source context
/// </summary>
/// <param name="context">The source context to subtract the offset from</param>
/// <param name="offset">The offset to subtract</param>
/// <returns>The new source context that reflects the subtraction of the offset from the context</returns>
public static JsSourceContext operator -(JsSourceContext context, int offset)
{
return FromIntPtr(context._context - offset);
}
/// <summary>
/// Subtracts a offset from the value of the source context
/// </summary>
/// <param name="left">The source context to subtract the offset from</param>
/// <param name="right">The offset to subtract</param>
/// <returns>The new source context that reflects the subtraction of the offset from the context</returns>
public static JsSourceContext Subtract(JsSourceContext left, int right)
{
return left - right;
}
/// <summary>
/// Decrements a value of the source context
/// </summary>
/// <param name="context">The source context to decrement</param>
/// <returns>The new source context that reflects the decrementing of the context</returns>
public static JsSourceContext operator --(JsSourceContext context)
{
return FromIntPtr(context._context - 1);
}
/// <summary>
/// Decrements a value of the source context
/// </summary>
/// <param name="left">The source context to decrement</param>
/// <returns>The new source context that reflects the decrementing of the context</returns>
public static JsSourceContext Decrement(JsSourceContext left)
{
return --left;
}
/// <summary>
/// Adds a offset from the value of the source context
/// </summary>
/// <param name="context">The source context to add the offset to</param>
/// <param name="offset">The offset to add</param>
/// <returns>The new source context that reflects the addition of the offset to the context</returns>
public static JsSourceContext operator +(JsSourceContext context, int offset)
{
return FromIntPtr(context._context + offset);
}
/// <summary>
/// Adds a offset from the value of the source context
/// </summary>
/// <param name="left">The source context to add the offset to</param>
/// <param name="right">The offset to add</param>
/// <returns>The new source context that reflects the addition of the offset to the context</returns>
public static JsSourceContext Add(JsSourceContext left, int right)
{
return left + right;
}
/// <summary>
/// Increments a value of the source context
/// </summary>
/// <param name="context">The source context to increment</param>
/// <returns>A new source context that reflects the incrementing of the context</returns>
public static JsSourceContext operator ++(JsSourceContext context)
{
return FromIntPtr(context._context + 1);
}
/// <summary>
/// Increments a value of the source context
/// </summary>
/// <param name="left">The source context to increment</param>
/// <returns>The new source context that reflects the incrementing of the context</returns>
public static JsSourceContext Increment(JsSourceContext left)
{
return ++left;
}
/// <summary>
/// Creates a new source context
/// </summary>
/// <param name="cookie">The cookie for the source context</param>
/// <returns>The new source context</returns>
public static JsSourceContext FromIntPtr(IntPtr cookie)
{
return new JsSourceContext(cookie);
}
/// <summary>
/// Checks for equality between source contexts
/// </summary>
/// <param name="obj">The other source context to compare</param>
/// <returns>Whether the two source contexts are the same</returns>
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
{
return false;
}
return obj is JsSourceContext && Equals((JsSourceContext)obj);
}
/// <summary>
/// The hash code
/// </summary>
/// <returns>The hash code of the source context</returns>
public override int GetHashCode()
{
return _context.ToInt32();
}
#region IEquatable<T> implementation
/// <summary>
/// Checks for equality between source contexts
/// </summary>
/// <param name="other">The other source context to compare</param>
/// <returns>Whether the two source contexts are the same</returns>
public bool Equals(JsSourceContext other)
{
return _context == other._context;
}
#endregion
}
}