Mercurial > pub > bltoolkit
comparison Source/Common/Operator.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f990fcb411a9 |
---|---|
1 using System; | |
2 using System.Data.SqlTypes; | |
3 | |
4 namespace BLToolkit.Common | |
5 { | |
6 public static class Operator<T> | |
7 { | |
8 public static IOperable<T> Op = GetOperable(); | |
9 private static IOperable<T> GetOperable() | |
10 { | |
11 Type t = typeof(T); | |
12 | |
13 // Scalar types. | |
14 // | |
15 if (t == typeof(String)) return (IOperable<T>)new S(); | |
16 | |
17 if (t == typeof(SByte)) return (IOperable<T>)new S8(); | |
18 if (t == typeof(Int16)) return (IOperable<T>)new S16(); | |
19 if (t == typeof(Int32)) return (IOperable<T>)new S32(); | |
20 if (t == typeof(Int64)) return (IOperable<T>)new S64(); | |
21 | |
22 if (t == typeof(Byte)) return (IOperable<T>)new U8(); | |
23 if (t == typeof(UInt16)) return (IOperable<T>)new U16(); | |
24 if (t == typeof(UInt32)) return (IOperable<T>)new U32(); | |
25 if (t == typeof(UInt64)) return (IOperable<T>)new U64(); | |
26 | |
27 if (t == typeof(bool)) return (IOperable<T>)new B(); | |
28 if (t == typeof(Char)) return (IOperable<T>)new C(); | |
29 if (t == typeof(Single)) return (IOperable<T>)new R4(); | |
30 if (t == typeof(Double)) return (IOperable<T>)new R8(); | |
31 | |
32 if (t == typeof(Decimal)) return (IOperable<T>)new D(); | |
33 if (t == typeof(DateTime)) return (IOperable<T>)new DT(); | |
34 if (t == typeof(TimeSpan)) return (IOperable<T>)new TS(); | |
35 if (t == typeof(Guid)) return (IOperable<T>)new G(); | |
36 | |
37 // Nullable types. | |
38 // | |
39 if (t == typeof(SByte?)) return (IOperable<T>)new NS8(); | |
40 if (t == typeof(Int16?)) return (IOperable<T>)new NS16(); | |
41 if (t == typeof(Int32?)) return (IOperable<T>)new NS32(); | |
42 if (t == typeof(Int64?)) return (IOperable<T>)new NS64(); | |
43 | |
44 if (t == typeof(Byte?)) return (IOperable<T>)new NU8(); | |
45 if (t == typeof(UInt16?)) return (IOperable<T>)new NU16(); | |
46 if (t == typeof(UInt32?)) return (IOperable<T>)new NU32(); | |
47 if (t == typeof(UInt64?)) return (IOperable<T>)new NU64(); | |
48 | |
49 if (t == typeof(bool?)) return (IOperable<T>)new NB(); | |
50 if (t == typeof(Char?)) return (IOperable<T>)new NC(); | |
51 if (t == typeof(Single?)) return (IOperable<T>)new NR4(); | |
52 if (t == typeof(Double?)) return (IOperable<T>)new NR8(); | |
53 | |
54 if (t == typeof(Decimal?)) return (IOperable<T>)new ND(); | |
55 if (t == typeof(DateTime?)) return (IOperable<T>)new NDT(); | |
56 if (t == typeof(TimeSpan?)) return (IOperable<T>)new NTS(); | |
57 if (t == typeof(Guid?)) return (IOperable<T>)new NG(); | |
58 | |
59 // Sql types. | |
60 // | |
61 if (t == typeof(SqlString)) return (IOperable<T>)new DBS(); | |
62 | |
63 if (t == typeof(SqlByte)) return (IOperable<T>)new DBU8(); | |
64 if (t == typeof(SqlInt16)) return (IOperable<T>)new DBS16(); | |
65 if (t == typeof(SqlInt32)) return (IOperable<T>)new DBS32(); | |
66 if (t == typeof(SqlInt64)) return (IOperable<T>)new DBS64(); | |
67 | |
68 if (t == typeof(SqlSingle)) return (IOperable<T>)new DBR4(); | |
69 if (t == typeof(SqlDouble)) return (IOperable<T>)new DBR8(); | |
70 if (t == typeof(SqlDecimal)) return (IOperable<T>)new DBD(); | |
71 if (t == typeof(SqlMoney)) return (IOperable<T>)new DBM(); | |
72 | |
73 if (t == typeof(SqlBoolean)) return (IOperable<T>)new DBB(); | |
74 if (t == typeof(SqlBinary)) return (IOperable<T>)new DBBin(); | |
75 if (t == typeof(SqlDateTime)) return (IOperable<T>)new DBDT(); | |
76 if (t == typeof(SqlGuid)) return (IOperable<T>)new DBG(); | |
77 | |
78 return new Default<T>(); | |
79 } | |
80 | |
81 public static T Addition (T op1, T op2) { return Op.Addition (op1, op2); } | |
82 public static T Subtraction (T op1, T op2) { return Op.Subtraction (op1, op2); } | |
83 public static T Multiply (T op1, T op2) { return Op.Multiply (op1, op2); } | |
84 public static T Division (T op1, T op2) { return Op.Division (op1, op2); } | |
85 public static T Modulus (T op1, T op2) { return Op.Modulus (op1, op2); } | |
86 | |
87 public static T BitwiseAnd (T op1, T op2) { return Op.BitwiseAnd (op1, op2); } | |
88 public static T BitwiseOr (T op1, T op2) { return Op.BitwiseOr (op1, op2); } | |
89 public static T ExclusiveOr (T op1, T op2) { return Op.ExclusiveOr (op1, op2); } | |
90 | |
91 public static T UnaryNegation (T op) { return Op.UnaryNegation (op); } | |
92 public static T OnesComplement (T op) { return Op.OnesComplement (op); } | |
93 | |
94 public static bool Equality (T op1, T op2) { return Op.Equality (op1, op2); } | |
95 public static bool Inequality (T op1, T op2) { return Op.Inequality (op1, op2); } | |
96 public static bool GreaterThan (T op1, T op2) { return Op.GreaterThan (op1, op2); } | |
97 public static bool GreaterThanOrEqual(T op1, T op2) { return Op.GreaterThanOrEqual(op1, op2); } | |
98 public static bool LessThan (T op1, T op2) { return Op.LessThan (op1, op2); } | |
99 public static bool LessThanOrEqual (T op1, T op2) { return Op.LessThanOrEqual (op1, op2); } | |
100 | |
101 #region Default | |
102 | |
103 private class Default<Q> : IOperable<Q> | |
104 { | |
105 public Q Addition (Q op1, Q op2) { throw new InvalidOperationException(); } | |
106 public Q Subtraction (Q op1, Q op2) { throw new InvalidOperationException(); } | |
107 public Q Multiply (Q op1, Q op2) { throw new InvalidOperationException(); } | |
108 public Q Division (Q op1, Q op2) { throw new InvalidOperationException(); } | |
109 public Q Modulus (Q op1, Q op2) { throw new InvalidOperationException(); } | |
110 | |
111 public Q BitwiseAnd (Q op1, Q op2) { throw new InvalidOperationException(); } | |
112 public Q BitwiseOr (Q op1, Q op2) { throw new InvalidOperationException(); } | |
113 public Q ExclusiveOr (Q op1, Q op2) { throw new InvalidOperationException(); } | |
114 | |
115 public Q UnaryNegation (Q op) { throw new InvalidOperationException(); } | |
116 public Q OnesComplement (Q op) { throw new InvalidOperationException(); } | |
117 | |
118 public bool Equality (Q op1, Q op2) { throw new InvalidOperationException(); } | |
119 public bool Inequality (Q op1, Q op2) { throw new InvalidOperationException(); } | |
120 public bool GreaterThan (Q op1, Q op2) { throw new InvalidOperationException(); } | |
121 public bool GreaterThanOrEqual(Q op1, Q op2) { throw new InvalidOperationException(); } | |
122 public bool LessThan (Q op1, Q op2) { throw new InvalidOperationException(); } | |
123 public bool LessThanOrEqual (Q op1, Q op2) { throw new InvalidOperationException(); } | |
124 } | |
125 | |
126 #endregion | |
127 | |
128 #region Scalar Types. | |
129 | |
130 #region String | |
131 | |
132 private class S : IOperable<String> | |
133 { | |
134 public String Addition (String op1, String op2) { return (op1 + op2); } | |
135 public String Subtraction (String op1, String op2) { throw new InvalidOperationException(); } | |
136 public String Multiply (String op1, String op2) { throw new InvalidOperationException(); } | |
137 public String Division (String op1, String op2) { throw new InvalidOperationException(); } | |
138 public String Modulus (String op1, String op2) { throw new InvalidOperationException(); } | |
139 | |
140 public String BitwiseAnd (String op1, String op2) { throw new InvalidOperationException(); } | |
141 public String BitwiseOr (String op1, String op2) { throw new InvalidOperationException(); } | |
142 public String ExclusiveOr (String op1, String op2) { throw new InvalidOperationException(); } | |
143 | |
144 public String UnaryNegation (String op) { throw new InvalidOperationException(); } | |
145 public String OnesComplement (String op) { throw new InvalidOperationException(); } | |
146 | |
147 public bool Equality (String op1, String op2) { return op1 == op2; } | |
148 public bool Inequality (String op1, String op2) { return op1 != op2; } | |
149 public bool GreaterThan (String op1, String op2) { throw new InvalidOperationException(); } | |
150 public bool GreaterThanOrEqual(String op1, String op2) { throw new InvalidOperationException(); } | |
151 public bool LessThan (String op1, String op2) { throw new InvalidOperationException(); } | |
152 public bool LessThanOrEqual (String op1, String op2) { throw new InvalidOperationException(); } | |
153 } | |
154 | |
155 #endregion | |
156 | |
157 #region SByte | |
158 | |
159 private class S8 : IOperable<SByte> | |
160 { | |
161 public SByte Addition (SByte op1, SByte op2) { return (SByte)(op1 + op2); } | |
162 public SByte Subtraction (SByte op1, SByte op2) { return (SByte)(op1 - op2); } | |
163 public SByte Multiply (SByte op1, SByte op2) { return (SByte)(op1 * op2); } | |
164 public SByte Division (SByte op1, SByte op2) { return (SByte)(op1 / op2); } | |
165 public SByte Modulus (SByte op1, SByte op2) { return (SByte)(op1 % op2); } | |
166 | |
167 public SByte BitwiseAnd (SByte op1, SByte op2) { return (SByte)(op1 & op2); } | |
168 public SByte BitwiseOr (SByte op1, SByte op2) { return (SByte)(op1 | op2); } | |
169 public SByte ExclusiveOr (SByte op1, SByte op2) { return (SByte)(op1 ^ op2); } | |
170 | |
171 public SByte UnaryNegation (SByte op) { return (SByte)(-op); } | |
172 public SByte OnesComplement (SByte op) { return (SByte)(~op); } | |
173 | |
174 public bool Equality (SByte op1, SByte op2) { return op1 == op2; } | |
175 public bool Inequality (SByte op1, SByte op2) { return op1 != op2; } | |
176 public bool GreaterThan (SByte op1, SByte op2) { return op1 > op2; } | |
177 public bool GreaterThanOrEqual(SByte op1, SByte op2) { return op1 >= op2; } | |
178 public bool LessThan (SByte op1, SByte op2) { return op1 < op2; } | |
179 public bool LessThanOrEqual (SByte op1, SByte op2) { return op1 <= op2; } | |
180 } | |
181 | |
182 #endregion | |
183 | |
184 #region Int16 | |
185 | |
186 private class S16 : IOperable<Int16> | |
187 { | |
188 public Int16 Addition (Int16 op1, Int16 op2) { return (Int16)(op1 + op2); } | |
189 public Int16 Subtraction (Int16 op1, Int16 op2) { return (Int16)(op1 - op2); } | |
190 public Int16 Multiply (Int16 op1, Int16 op2) { return (Int16)(op1 * op2); } | |
191 public Int16 Division (Int16 op1, Int16 op2) { return (Int16)(op1 / op2); } | |
192 public Int16 Modulus (Int16 op1, Int16 op2) { return (Int16)(op1 % op2); } | |
193 | |
194 public Int16 BitwiseAnd (Int16 op1, Int16 op2) { return (Int16)(op1 & op2); } | |
195 public Int16 BitwiseOr (Int16 op1, Int16 op2) { return (Int16)(op1 | op2); } | |
196 public Int16 ExclusiveOr (Int16 op1, Int16 op2) { return (Int16)(op1 ^ op2); } | |
197 | |
198 public Int16 UnaryNegation (Int16 op) { return (Int16)(-op); } | |
199 public Int16 OnesComplement (Int16 op) { return (Int16)(~op); } | |
200 | |
201 public bool Equality (Int16 op1, Int16 op2) { return op1 == op2; } | |
202 public bool Inequality (Int16 op1, Int16 op2) { return op1 != op2; } | |
203 public bool GreaterThan (Int16 op1, Int16 op2) { return op1 > op2; } | |
204 public bool GreaterThanOrEqual(Int16 op1, Int16 op2) { return op1 >= op2; } | |
205 public bool LessThan (Int16 op1, Int16 op2) { return op1 < op2; } | |
206 public bool LessThanOrEqual (Int16 op1, Int16 op2) { return op1 <= op2; } | |
207 } | |
208 | |
209 #endregion | |
210 | |
211 #region Int32 | |
212 | |
213 private class S32 : IOperable<Int32> | |
214 { | |
215 public Int32 Addition (Int32 op1, Int32 op2) { return (op1 + op2); } | |
216 public Int32 Subtraction (Int32 op1, Int32 op2) { return (op1 - op2); } | |
217 public Int32 Multiply (Int32 op1, Int32 op2) { return (op1 * op2); } | |
218 public Int32 Division (Int32 op1, Int32 op2) { return (op1 / op2); } | |
219 public Int32 Modulus (Int32 op1, Int32 op2) { return (op1 % op2); } | |
220 | |
221 public Int32 BitwiseAnd (Int32 op1, Int32 op2) { return (op1 & op2); } | |
222 public Int32 BitwiseOr (Int32 op1, Int32 op2) { return (op1 | op2); } | |
223 public Int32 ExclusiveOr (Int32 op1, Int32 op2) { return (op1 ^ op2); } | |
224 | |
225 public Int32 UnaryNegation (Int32 op) { return (-op); } | |
226 public Int32 OnesComplement (Int32 op) { return (~op); } | |
227 | |
228 public bool Equality (Int32 op1, Int32 op2) { return op1 == op2; } | |
229 public bool Inequality (Int32 op1, Int32 op2) { return op1 != op2; } | |
230 public bool GreaterThan (Int32 op1, Int32 op2) { return op1 > op2; } | |
231 public bool GreaterThanOrEqual(Int32 op1, Int32 op2) { return op1 >= op2; } | |
232 public bool LessThan (Int32 op1, Int32 op2) { return op1 < op2; } | |
233 public bool LessThanOrEqual (Int32 op1, Int32 op2) { return op1 <= op2; } | |
234 } | |
235 | |
236 #endregion | |
237 | |
238 #region Int64 | |
239 | |
240 private class S64 : IOperable<Int64> | |
241 { | |
242 public Int64 Addition (Int64 op1, Int64 op2) { return (op1 + op2); } | |
243 public Int64 Subtraction (Int64 op1, Int64 op2) { return (op1 - op2); } | |
244 public Int64 Multiply (Int64 op1, Int64 op2) { return (op1 * op2); } | |
245 public Int64 Division (Int64 op1, Int64 op2) { return (op1 / op2); } | |
246 public Int64 Modulus (Int64 op1, Int64 op2) { return (op1 % op2); } | |
247 | |
248 public Int64 BitwiseAnd (Int64 op1, Int64 op2) { return (op1 & op2); } | |
249 public Int64 BitwiseOr (Int64 op1, Int64 op2) { return (op1 | op2); } | |
250 public Int64 ExclusiveOr (Int64 op1, Int64 op2) { return (op1 ^ op2); } | |
251 | |
252 public Int64 UnaryNegation (Int64 op) { return (-op); } | |
253 public Int64 OnesComplement (Int64 op) { return (~op); } | |
254 | |
255 public bool Equality (Int64 op1, Int64 op2) { return op1 == op2; } | |
256 public bool Inequality (Int64 op1, Int64 op2) { return op1 != op2; } | |
257 public bool GreaterThan (Int64 op1, Int64 op2) { return op1 > op2; } | |
258 public bool GreaterThanOrEqual(Int64 op1, Int64 op2) { return op1 >= op2; } | |
259 public bool LessThan (Int64 op1, Int64 op2) { return op1 < op2; } | |
260 public bool LessThanOrEqual (Int64 op1, Int64 op2) { return op1 <= op2; } | |
261 } | |
262 | |
263 #endregion | |
264 | |
265 #region Byte | |
266 | |
267 private class U8 : IOperable<Byte> | |
268 { | |
269 public Byte Addition (Byte op1, Byte op2) { return (Byte)(op1 + op2); } | |
270 public Byte Subtraction (Byte op1, Byte op2) { return (Byte)(op1 - op2); } | |
271 public Byte Multiply (Byte op1, Byte op2) { return (Byte)(op1 * op2); } | |
272 public Byte Division (Byte op1, Byte op2) { return (Byte)(op1 / op2); } | |
273 public Byte Modulus (Byte op1, Byte op2) { return (Byte)(op1 % op2); } | |
274 | |
275 public Byte BitwiseAnd (Byte op1, Byte op2) { return (Byte)(op1 & op2); } | |
276 public Byte BitwiseOr (Byte op1, Byte op2) { return (Byte)(op1 | op2); } | |
277 public Byte ExclusiveOr (Byte op1, Byte op2) { return (Byte)(op1 ^ op2); } | |
278 | |
279 public Byte UnaryNegation (Byte op) { throw new InvalidOperationException(); } | |
280 public Byte OnesComplement (Byte op) { return (Byte)(~op); } | |
281 | |
282 public bool Equality (Byte op1, Byte op2) { return op1 == op2; } | |
283 public bool Inequality (Byte op1, Byte op2) { return op1 != op2; } | |
284 public bool GreaterThan (Byte op1, Byte op2) { return op1 > op2; } | |
285 public bool GreaterThanOrEqual(Byte op1, Byte op2) { return op1 >= op2; } | |
286 public bool LessThan (Byte op1, Byte op2) { return op1 < op2; } | |
287 public bool LessThanOrEqual (Byte op1, Byte op2) { return op1 <= op2; } | |
288 } | |
289 | |
290 #endregion | |
291 | |
292 #region UInt16 | |
293 | |
294 private class U16 : IOperable<UInt16> | |
295 { | |
296 public UInt16 Addition (UInt16 op1, UInt16 op2) { return (UInt16)(op1 + op2); } | |
297 public UInt16 Subtraction (UInt16 op1, UInt16 op2) { return (UInt16)(op1 - op2); } | |
298 public UInt16 Multiply (UInt16 op1, UInt16 op2) { return (UInt16)(op1 * op2); } | |
299 public UInt16 Division (UInt16 op1, UInt16 op2) { return (UInt16)(op1 / op2); } | |
300 public UInt16 Modulus (UInt16 op1, UInt16 op2) { return (UInt16)(op1 % op2); } | |
301 | |
302 public UInt16 BitwiseAnd (UInt16 op1, UInt16 op2) { return (UInt16)(op1 & op2); } | |
303 public UInt16 BitwiseOr (UInt16 op1, UInt16 op2) { return (UInt16)(op1 | op2); } | |
304 public UInt16 ExclusiveOr (UInt16 op1, UInt16 op2) { return (UInt16)(op1 ^ op2); } | |
305 | |
306 public UInt16 UnaryNegation (UInt16 op) { throw new InvalidOperationException(); } | |
307 public UInt16 OnesComplement (UInt16 op) { return (UInt16)(~op); } | |
308 | |
309 public bool Equality (UInt16 op1, UInt16 op2) { return op1 == op2; } | |
310 public bool Inequality (UInt16 op1, UInt16 op2) { return op1 != op2; } | |
311 public bool GreaterThan (UInt16 op1, UInt16 op2) { return op1 > op2; } | |
312 public bool GreaterThanOrEqual(UInt16 op1, UInt16 op2) { return op1 >= op2; } | |
313 public bool LessThan (UInt16 op1, UInt16 op2) { return op1 < op2; } | |
314 public bool LessThanOrEqual (UInt16 op1, UInt16 op2) { return op1 <= op2; } | |
315 } | |
316 | |
317 #endregion | |
318 | |
319 #region UInt32 | |
320 | |
321 private class U32 : IOperable<UInt32> | |
322 { | |
323 public UInt32 Addition (UInt32 op1, UInt32 op2) { return (op1 + op2); } | |
324 public UInt32 Subtraction (UInt32 op1, UInt32 op2) { return (op1 - op2); } | |
325 public UInt32 Multiply (UInt32 op1, UInt32 op2) { return (op1 * op2); } | |
326 public UInt32 Division (UInt32 op1, UInt32 op2) { return (op1 / op2); } | |
327 public UInt32 Modulus (UInt32 op1, UInt32 op2) { return (op1 % op2); } | |
328 | |
329 public UInt32 BitwiseAnd (UInt32 op1, UInt32 op2) { return (op1 & op2); } | |
330 public UInt32 BitwiseOr (UInt32 op1, UInt32 op2) { return (op1 | op2); } | |
331 public UInt32 ExclusiveOr (UInt32 op1, UInt32 op2) { return (op1 ^ op2); } | |
332 | |
333 public UInt32 UnaryNegation (UInt32 op) { throw new InvalidOperationException(); } | |
334 public UInt32 OnesComplement (UInt32 op) { return (~op); } | |
335 | |
336 public bool Equality (UInt32 op1, UInt32 op2) { return op1 == op2; } | |
337 public bool Inequality (UInt32 op1, UInt32 op2) { return op1 != op2; } | |
338 public bool GreaterThan (UInt32 op1, UInt32 op2) { return op1 > op2; } | |
339 public bool GreaterThanOrEqual(UInt32 op1, UInt32 op2) { return op1 >= op2; } | |
340 public bool LessThan (UInt32 op1, UInt32 op2) { return op1 < op2; } | |
341 public bool LessThanOrEqual (UInt32 op1, UInt32 op2) { return op1 <= op2; } | |
342 } | |
343 | |
344 #endregion | |
345 | |
346 #region UInt64 | |
347 | |
348 private class U64 : IOperable<UInt64> | |
349 { | |
350 public UInt64 Addition (UInt64 op1, UInt64 op2) { return (op1 + op2); } | |
351 public UInt64 Subtraction (UInt64 op1, UInt64 op2) { return (op1 - op2); } | |
352 public UInt64 Multiply (UInt64 op1, UInt64 op2) { return (op1 * op2); } | |
353 public UInt64 Division (UInt64 op1, UInt64 op2) { return (op1 / op2); } | |
354 public UInt64 Modulus (UInt64 op1, UInt64 op2) { return (op1 % op2); } | |
355 | |
356 public UInt64 BitwiseAnd (UInt64 op1, UInt64 op2) { return (op1 & op2); } | |
357 public UInt64 BitwiseOr (UInt64 op1, UInt64 op2) { return (op1 | op2); } | |
358 public UInt64 ExclusiveOr (UInt64 op1, UInt64 op2) { return (op1 ^ op2); } | |
359 | |
360 public UInt64 UnaryNegation (UInt64 op) { throw new InvalidOperationException(); } | |
361 public UInt64 OnesComplement (UInt64 op) { return (~op); } | |
362 | |
363 public bool Equality (UInt64 op1, UInt64 op2) { return op1 == op2; } | |
364 public bool Inequality (UInt64 op1, UInt64 op2) { return op1 != op2; } | |
365 public bool GreaterThan (UInt64 op1, UInt64 op2) { return op1 > op2; } | |
366 public bool GreaterThanOrEqual(UInt64 op1, UInt64 op2) { return op1 >= op2; } | |
367 public bool LessThan (UInt64 op1, UInt64 op2) { return op1 < op2; } | |
368 public bool LessThanOrEqual (UInt64 op1, UInt64 op2) { return op1 <= op2; } | |
369 } | |
370 | |
371 #endregion | |
372 | |
373 #region Boolean | |
374 | |
375 private class B : IOperable<Boolean> | |
376 { | |
377 public Boolean Addition (Boolean op1, Boolean op2) { throw new InvalidOperationException(); } | |
378 public Boolean Subtraction (Boolean op1, Boolean op2) { throw new InvalidOperationException(); } | |
379 public Boolean Multiply (Boolean op1, Boolean op2) { throw new InvalidOperationException(); } | |
380 public Boolean Division (Boolean op1, Boolean op2) { throw new InvalidOperationException(); } | |
381 public Boolean Modulus (Boolean op1, Boolean op2) { throw new InvalidOperationException(); } | |
382 | |
383 public Boolean BitwiseAnd (Boolean op1, Boolean op2) { return (op1 & op2); } | |
384 public Boolean BitwiseOr (Boolean op1, Boolean op2) { return (op1 | op2); } | |
385 public Boolean ExclusiveOr (Boolean op1, Boolean op2) { return (op1 ^ op2); } | |
386 | |
387 public Boolean UnaryNegation (Boolean op) { throw new InvalidOperationException(); } | |
388 public Boolean OnesComplement (Boolean op) { return !op; } | |
389 | |
390 public bool Equality (Boolean op1, Boolean op2) { return op1 == op2; } | |
391 public bool Inequality (Boolean op1, Boolean op2) { return op1 != op2; } | |
392 public bool GreaterThan (Boolean op1, Boolean op2) { throw new InvalidOperationException(); } | |
393 public bool GreaterThanOrEqual(Boolean op1, Boolean op2) { throw new InvalidOperationException(); } | |
394 public bool LessThan (Boolean op1, Boolean op2) { throw new InvalidOperationException(); } | |
395 public bool LessThanOrEqual (Boolean op1, Boolean op2) { throw new InvalidOperationException(); } | |
396 } | |
397 | |
398 #endregion | |
399 | |
400 #region Char | |
401 | |
402 private class C : IOperable<Char> | |
403 { | |
404 public Char Addition (Char op1, Char op2) { return (Char)(op1 + op2); } | |
405 public Char Subtraction (Char op1, Char op2) { return (Char)(op1 - op2); } | |
406 public Char Multiply (Char op1, Char op2) { return (Char)(op1 * op2); } | |
407 public Char Division (Char op1, Char op2) { return (Char)(op1 / op2); } | |
408 public Char Modulus (Char op1, Char op2) { return (Char)(op1 % op2); } | |
409 | |
410 public Char BitwiseAnd (Char op1, Char op2) { return (Char)(op1 & op2); } | |
411 public Char BitwiseOr (Char op1, Char op2) { return (Char)(op1 | op2); } | |
412 public Char ExclusiveOr (Char op1, Char op2) { return (Char)(op1 ^ op2); } | |
413 | |
414 public Char UnaryNegation (Char op) { return (Char)(-op); } | |
415 public Char OnesComplement (Char op) { return (Char)(~op); } | |
416 | |
417 public bool Equality (Char op1, Char op2) { return op1 == op2; } | |
418 public bool Inequality (Char op1, Char op2) { return op1 != op2; } | |
419 public bool GreaterThan (Char op1, Char op2) { return op1 > op2; } | |
420 public bool GreaterThanOrEqual(Char op1, Char op2) { return op1 >= op2; } | |
421 public bool LessThan (Char op1, Char op2) { return op1 < op2; } | |
422 public bool LessThanOrEqual (Char op1, Char op2) { return op1 <= op2; } | |
423 } | |
424 | |
425 #endregion | |
426 | |
427 #region Single | |
428 | |
429 private class R4 : IOperable<Single> | |
430 { | |
431 public Single Addition (Single op1, Single op2) { return (op1 + op2); } | |
432 public Single Subtraction (Single op1, Single op2) { return (op1 - op2); } | |
433 public Single Multiply (Single op1, Single op2) { return (op1 * op2); } | |
434 public Single Division (Single op1, Single op2) { return (op1 / op2); } | |
435 public Single Modulus (Single op1, Single op2) { return (op1 % op2); } | |
436 | |
437 public Single BitwiseAnd (Single op1, Single op2) { throw new InvalidOperationException(); } | |
438 public Single BitwiseOr (Single op1, Single op2) { throw new InvalidOperationException(); } | |
439 public Single ExclusiveOr (Single op1, Single op2) { throw new InvalidOperationException(); } | |
440 | |
441 public Single UnaryNegation (Single op) { return (-op); } | |
442 public Single OnesComplement (Single op) { throw new InvalidOperationException(); } | |
443 | |
444 public bool Equality (Single op1, Single op2) { return op1 == op2; } | |
445 public bool Inequality (Single op1, Single op2) { return op1 != op2; } | |
446 public bool GreaterThan (Single op1, Single op2) { return op1 > op2; } | |
447 public bool GreaterThanOrEqual(Single op1, Single op2) { return op1 >= op2; } | |
448 public bool LessThan (Single op1, Single op2) { return op1 < op2; } | |
449 public bool LessThanOrEqual (Single op1, Single op2) { return op1 <= op2; } | |
450 } | |
451 | |
452 #endregion | |
453 | |
454 #region Double | |
455 | |
456 private class R8 : IOperable<Double> | |
457 { | |
458 public Double Addition (Double op1, Double op2) { return (op1 + op2); } | |
459 public Double Subtraction (Double op1, Double op2) { return (op1 - op2); } | |
460 public Double Multiply (Double op1, Double op2) { return (op1 * op2); } | |
461 public Double Division (Double op1, Double op2) { return (op1 / op2); } | |
462 public Double Modulus (Double op1, Double op2) { return (op1 % op2); } | |
463 | |
464 public Double BitwiseAnd (Double op1, Double op2) { throw new InvalidOperationException(); } | |
465 public Double BitwiseOr (Double op1, Double op2) { throw new InvalidOperationException(); } | |
466 public Double ExclusiveOr (Double op1, Double op2) { throw new InvalidOperationException(); } | |
467 | |
468 public Double UnaryNegation (Double op) { return (-op); } | |
469 public Double OnesComplement (Double op) { throw new InvalidOperationException(); } | |
470 | |
471 public bool Equality (Double op1, Double op2) { return op1 == op2; } | |
472 public bool Inequality (Double op1, Double op2) { return op1 != op2; } | |
473 public bool GreaterThan (Double op1, Double op2) { return op1 > op2; } | |
474 public bool GreaterThanOrEqual(Double op1, Double op2) { return op1 >= op2; } | |
475 public bool LessThan (Double op1, Double op2) { return op1 < op2; } | |
476 public bool LessThanOrEqual (Double op1, Double op2) { return op1 <= op2; } | |
477 } | |
478 | |
479 #endregion | |
480 | |
481 #region Decimal | |
482 | |
483 private class D : IOperable<Decimal> | |
484 { | |
485 public Decimal Addition (Decimal op1, Decimal op2) { return (op1 + op2); } | |
486 public Decimal Subtraction (Decimal op1, Decimal op2) { return (op1 - op2); } | |
487 public Decimal Multiply (Decimal op1, Decimal op2) { return (op1 * op2); } | |
488 public Decimal Division (Decimal op1, Decimal op2) { return (op1 / op2); } | |
489 public Decimal Modulus (Decimal op1, Decimal op2) { return (op1 % op2); } | |
490 | |
491 public Decimal BitwiseAnd (Decimal op1, Decimal op2) { throw new InvalidOperationException(); } | |
492 public Decimal BitwiseOr (Decimal op1, Decimal op2) { throw new InvalidOperationException(); } | |
493 public Decimal ExclusiveOr (Decimal op1, Decimal op2) { throw new InvalidOperationException(); } | |
494 | |
495 public Decimal UnaryNegation (Decimal op) { return (-op); } | |
496 public Decimal OnesComplement (Decimal op) { throw new InvalidOperationException(); } | |
497 | |
498 public bool Equality (Decimal op1, Decimal op2) { return op1 == op2; } | |
499 public bool Inequality (Decimal op1, Decimal op2) { return op1 != op2; } | |
500 public bool GreaterThan (Decimal op1, Decimal op2) { return op1 > op2; } | |
501 public bool GreaterThanOrEqual(Decimal op1, Decimal op2) { return op1 >= op2; } | |
502 public bool LessThan (Decimal op1, Decimal op2) { return op1 < op2; } | |
503 public bool LessThanOrEqual (Decimal op1, Decimal op2) { return op1 <= op2; } | |
504 } | |
505 | |
506 #endregion | |
507 | |
508 #region DateTime | |
509 | |
510 private class DT : IOperable<DateTime> | |
511 { | |
512 public DateTime Addition (DateTime op1, DateTime op2) { throw new InvalidOperationException(); } | |
513 public DateTime Subtraction (DateTime op1, DateTime op2) { throw new InvalidOperationException(); } | |
514 public DateTime Multiply (DateTime op1, DateTime op2) { throw new InvalidOperationException(); } | |
515 public DateTime Division (DateTime op1, DateTime op2) { throw new InvalidOperationException(); } | |
516 public DateTime Modulus (DateTime op1, DateTime op2) { throw new InvalidOperationException(); } | |
517 | |
518 public DateTime BitwiseAnd (DateTime op1, DateTime op2) { throw new InvalidOperationException(); } | |
519 public DateTime BitwiseOr (DateTime op1, DateTime op2) { throw new InvalidOperationException(); } | |
520 public DateTime ExclusiveOr (DateTime op1, DateTime op2) { throw new InvalidOperationException(); } | |
521 | |
522 public DateTime UnaryNegation (DateTime op) { throw new InvalidOperationException(); } | |
523 public DateTime OnesComplement(DateTime op) { throw new InvalidOperationException(); } | |
524 | |
525 public bool Equality (DateTime op1, DateTime op2) { return op1 == op2; } | |
526 public bool Inequality (DateTime op1, DateTime op2) { return op1 != op2; } | |
527 public bool GreaterThan (DateTime op1, DateTime op2) { return op1 > op2; } | |
528 public bool GreaterThanOrEqual(DateTime op1, DateTime op2) { return op1 >= op2; } | |
529 public bool LessThan (DateTime op1, DateTime op2) { return op1 < op2; } | |
530 public bool LessThanOrEqual (DateTime op1, DateTime op2) { return op1 <= op2; } | |
531 } | |
532 | |
533 #endregion | |
534 | |
535 #region TimeSpan | |
536 | |
537 private class TS : IOperable<TimeSpan> | |
538 { | |
539 public TimeSpan Addition (TimeSpan op1, TimeSpan op2) { return (op1 + op2); } | |
540 public TimeSpan Subtraction (TimeSpan op1, TimeSpan op2) { return (op1 - op2); } | |
541 public TimeSpan Multiply (TimeSpan op1, TimeSpan op2) { throw new InvalidOperationException(); } | |
542 public TimeSpan Division (TimeSpan op1, TimeSpan op2) { throw new InvalidOperationException(); } | |
543 public TimeSpan Modulus (TimeSpan op1, TimeSpan op2) { throw new InvalidOperationException(); } | |
544 | |
545 public TimeSpan BitwiseAnd (TimeSpan op1, TimeSpan op2) { throw new InvalidOperationException(); } | |
546 public TimeSpan BitwiseOr (TimeSpan op1, TimeSpan op2) { throw new InvalidOperationException(); } | |
547 public TimeSpan ExclusiveOr (TimeSpan op1, TimeSpan op2) { throw new InvalidOperationException(); } | |
548 | |
549 public TimeSpan UnaryNegation (TimeSpan op) { return (-op); } | |
550 public TimeSpan OnesComplement(TimeSpan op) { throw new InvalidOperationException(); } | |
551 | |
552 public bool Equality (TimeSpan op1, TimeSpan op2) { return op1 == op2; } | |
553 public bool Inequality (TimeSpan op1, TimeSpan op2) { return op1 != op2; } | |
554 public bool GreaterThan (TimeSpan op1, TimeSpan op2) { return op1 > op2; } | |
555 public bool GreaterThanOrEqual(TimeSpan op1, TimeSpan op2) { return op1 >= op2; } | |
556 public bool LessThan (TimeSpan op1, TimeSpan op2) { return op1 < op2; } | |
557 public bool LessThanOrEqual (TimeSpan op1, TimeSpan op2) { return op1 <= op2; } | |
558 } | |
559 | |
560 #endregion | |
561 | |
562 #region Guid | |
563 | |
564 private class G : IOperable<Guid> | |
565 { | |
566 public Guid Addition (Guid op1, Guid op2) { throw new InvalidOperationException(); } | |
567 public Guid Subtraction (Guid op1, Guid op2) { throw new InvalidOperationException(); } | |
568 public Guid Multiply (Guid op1, Guid op2) { throw new InvalidOperationException(); } | |
569 public Guid Division (Guid op1, Guid op2) { throw new InvalidOperationException(); } | |
570 public Guid Modulus (Guid op1, Guid op2) { throw new InvalidOperationException(); } | |
571 | |
572 public Guid BitwiseAnd (Guid op1, Guid op2) { throw new InvalidOperationException(); } | |
573 public Guid BitwiseOr (Guid op1, Guid op2) { throw new InvalidOperationException(); } | |
574 public Guid ExclusiveOr (Guid op1, Guid op2) { throw new InvalidOperationException(); } | |
575 | |
576 public Guid UnaryNegation (Guid op) { throw new InvalidOperationException(); } | |
577 public Guid OnesComplement (Guid op) { throw new InvalidOperationException(); } | |
578 | |
579 public bool Equality (Guid op1, Guid op2) { return op1 == op2; } | |
580 public bool Inequality (Guid op1, Guid op2) { return op1 != op2; } | |
581 public bool GreaterThan (Guid op1, Guid op2) { throw new InvalidOperationException(); } | |
582 public bool GreaterThanOrEqual(Guid op1, Guid op2) { throw new InvalidOperationException(); } | |
583 public bool LessThan (Guid op1, Guid op2) { throw new InvalidOperationException(); } | |
584 public bool LessThanOrEqual (Guid op1, Guid op2) { throw new InvalidOperationException(); } | |
585 } | |
586 | |
587 #endregion | |
588 | |
589 #endregion | |
590 | |
591 #region Nullable Types. | |
592 | |
593 #region SByte | |
594 | |
595 private class NS8 : IOperable<SByte?> | |
596 { | |
597 public SByte? Addition (SByte? op1, SByte? op2) { return (SByte?)(op1 + op2); } | |
598 public SByte? Subtraction (SByte? op1, SByte? op2) { return (SByte?)(op1 - op2); } | |
599 public SByte? Multiply (SByte? op1, SByte? op2) { return (SByte?)(op1 * op2); } | |
600 public SByte? Division (SByte? op1, SByte? op2) { return (SByte?)(op1 / op2); } | |
601 public SByte? Modulus (SByte? op1, SByte? op2) { return (SByte?)(op1 % op2); } | |
602 | |
603 public SByte? BitwiseAnd (SByte? op1, SByte? op2) { return (SByte?)(op1 & op2); } | |
604 public SByte? BitwiseOr (SByte? op1, SByte? op2) { return (SByte?)(op1 | op2); } | |
605 public SByte? ExclusiveOr (SByte? op1, SByte? op2) { return (SByte?)(op1 ^ op2); } | |
606 | |
607 public SByte? UnaryNegation (SByte? op) { return (SByte)(- op); } | |
608 public SByte? OnesComplement (SByte? op) { return (SByte)(~op); } | |
609 | |
610 public bool Equality (SByte? op1, SByte? op2) { return op1 == op2; } | |
611 public bool Inequality (SByte? op1, SByte? op2) { return op1 != op2; } | |
612 public bool GreaterThan (SByte? op1, SByte? op2) { return op1 > op2; } | |
613 public bool GreaterThanOrEqual(SByte? op1, SByte? op2) { return op1 >= op2; } | |
614 public bool LessThan (SByte? op1, SByte? op2) { return op1 < op2; } | |
615 public bool LessThanOrEqual (SByte? op1, SByte? op2) { return op1 <= op2; } | |
616 } | |
617 | |
618 #endregion | |
619 | |
620 #region Int16 | |
621 | |
622 private class NS16 : IOperable<Int16?> | |
623 { | |
624 public Int16? Addition (Int16? op1, Int16? op2) { return (Int16?)(op1 + op2); } | |
625 public Int16? Subtraction (Int16? op1, Int16? op2) { return (Int16?)(op1 - op2); } | |
626 public Int16? Multiply (Int16? op1, Int16? op2) { return (Int16?)(op1 * op2); } | |
627 public Int16? Division (Int16? op1, Int16? op2) { return (Int16?)(op1 / op2); } | |
628 public Int16? Modulus (Int16? op1, Int16? op2) { return (Int16?)(op1 % op2); } | |
629 | |
630 public Int16? BitwiseAnd (Int16? op1, Int16? op2) { return (Int16?)(op1 & op2); } | |
631 public Int16? BitwiseOr (Int16? op1, Int16? op2) { return (Int16?)(op1 | op2); } | |
632 public Int16? ExclusiveOr (Int16? op1, Int16? op2) { return (Int16?)(op1 ^ op2); } | |
633 | |
634 public Int16? UnaryNegation (Int16? op) { return (Int16)(- op); } | |
635 public Int16? OnesComplement (Int16? op) { return (Int16)(~op); } | |
636 | |
637 public bool Equality (Int16? op1, Int16? op2) { return op1 == op2; } | |
638 public bool Inequality (Int16? op1, Int16? op2) { return op1 != op2; } | |
639 public bool GreaterThan (Int16? op1, Int16? op2) { return op1 > op2; } | |
640 public bool GreaterThanOrEqual(Int16? op1, Int16? op2) { return op1 >= op2; } | |
641 public bool LessThan (Int16? op1, Int16? op2) { return op1 < op2; } | |
642 public bool LessThanOrEqual (Int16? op1, Int16? op2) { return op1 <= op2; } | |
643 } | |
644 | |
645 #endregion | |
646 | |
647 #region Int32 | |
648 | |
649 private class NS32 : IOperable<Int32?> | |
650 { | |
651 public Int32? Addition (Int32? op1, Int32? op2) { return (op1 + op2); } | |
652 public Int32? Subtraction (Int32? op1, Int32? op2) { return (op1 - op2); } | |
653 public Int32? Multiply (Int32? op1, Int32? op2) { return (op1 * op2); } | |
654 public Int32? Division (Int32? op1, Int32? op2) { return (op1 / op2); } | |
655 public Int32? Modulus (Int32? op1, Int32? op2) { return (op1 % op2); } | |
656 | |
657 public Int32? BitwiseAnd (Int32? op1, Int32? op2) { return (op1 & op2); } | |
658 public Int32? BitwiseOr (Int32? op1, Int32? op2) { return (op1 | op2); } | |
659 public Int32? ExclusiveOr (Int32? op1, Int32? op2) { return (op1 ^ op2); } | |
660 | |
661 public Int32? UnaryNegation (Int32? op) { return (- op); } | |
662 public Int32? OnesComplement (Int32? op) { return (~op); } | |
663 | |
664 public bool Equality (Int32? op1, Int32? op2) { return op1 == op2; } | |
665 public bool Inequality (Int32? op1, Int32? op2) { return op1 != op2; } | |
666 public bool GreaterThan (Int32? op1, Int32? op2) { return op1 > op2; } | |
667 public bool GreaterThanOrEqual(Int32? op1, Int32? op2) { return op1 >= op2; } | |
668 public bool LessThan (Int32? op1, Int32? op2) { return op1 < op2; } | |
669 public bool LessThanOrEqual (Int32? op1, Int32? op2) { return op1 <= op2; } | |
670 } | |
671 | |
672 #endregion | |
673 | |
674 #region Int64 | |
675 | |
676 private class NS64 : IOperable<Int64?> | |
677 { | |
678 public Int64? Addition (Int64? op1, Int64? op2) { return (op1 + op2); } | |
679 public Int64? Subtraction (Int64? op1, Int64? op2) { return (op1 - op2); } | |
680 public Int64? Multiply (Int64? op1, Int64? op2) { return (op1 * op2); } | |
681 public Int64? Division (Int64? op1, Int64? op2) { return (op1 / op2); } | |
682 public Int64? Modulus (Int64? op1, Int64? op2) { return (op1 % op2); } | |
683 | |
684 public Int64? BitwiseAnd (Int64? op1, Int64? op2) { return (op1 & op2); } | |
685 public Int64? BitwiseOr (Int64? op1, Int64? op2) { return (op1 | op2); } | |
686 public Int64? ExclusiveOr (Int64? op1, Int64? op2) { return (op1 ^ op2); } | |
687 | |
688 public Int64? UnaryNegation (Int64? op) { return (- op); } | |
689 public Int64? OnesComplement (Int64? op) { return (~op); } | |
690 | |
691 public bool Equality (Int64? op1, Int64? op2) { return op1 == op2; } | |
692 public bool Inequality (Int64? op1, Int64? op2) { return op1 != op2; } | |
693 public bool GreaterThan (Int64? op1, Int64? op2) { return op1 > op2; } | |
694 public bool GreaterThanOrEqual(Int64? op1, Int64? op2) { return op1 >= op2; } | |
695 public bool LessThan (Int64? op1, Int64? op2) { return op1 < op2; } | |
696 public bool LessThanOrEqual (Int64? op1, Int64? op2) { return op1 <= op2; } | |
697 } | |
698 | |
699 #endregion | |
700 | |
701 #region Byte | |
702 | |
703 private class NU8 : IOperable<Byte?> | |
704 { | |
705 public Byte? Addition (Byte? op1, Byte? op2) { return (Byte?)(op1 + op2); } | |
706 public Byte? Subtraction (Byte? op1, Byte? op2) { return (Byte?)(op1 - op2); } | |
707 public Byte? Multiply (Byte? op1, Byte? op2) { return (Byte?)(op1 * op2); } | |
708 public Byte? Division (Byte? op1, Byte? op2) { return (Byte?)(op1 / op2); } | |
709 public Byte? Modulus (Byte? op1, Byte? op2) { return (Byte?)(op1 % op2); } | |
710 | |
711 public Byte? BitwiseAnd (Byte? op1, Byte? op2) { return (Byte?)(op1 & op2); } | |
712 public Byte? BitwiseOr (Byte? op1, Byte? op2) { return (Byte?)(op1 | op2); } | |
713 public Byte? ExclusiveOr (Byte? op1, Byte? op2) { return (Byte?)(op1 ^ op2); } | |
714 | |
715 public Byte? UnaryNegation (Byte? op) { throw new InvalidOperationException(); } | |
716 public Byte? OnesComplement (Byte? op) { return (Byte?)(~op); } | |
717 | |
718 public bool Equality (Byte? op1, Byte? op2) { return op1 == op2; } | |
719 public bool Inequality (Byte? op1, Byte? op2) { return op1 != op2; } | |
720 public bool GreaterThan (Byte? op1, Byte? op2) { return op1 > op2; } | |
721 public bool GreaterThanOrEqual(Byte? op1, Byte? op2) { return op1 >= op2; } | |
722 public bool LessThan (Byte? op1, Byte? op2) { return op1 < op2; } | |
723 public bool LessThanOrEqual (Byte? op1, Byte? op2) { return op1 <= op2; } | |
724 } | |
725 | |
726 #endregion | |
727 | |
728 #region UInt16 | |
729 | |
730 private class NU16 : IOperable<UInt16?> | |
731 { | |
732 public UInt16? Addition (UInt16? op1, UInt16? op2) { return (UInt16?)(op1 + op2); } | |
733 public UInt16? Subtraction (UInt16? op1, UInt16? op2) { return (UInt16?)(op1 - op2); } | |
734 public UInt16? Multiply (UInt16? op1, UInt16? op2) { return (UInt16?)(op1 * op2); } | |
735 public UInt16? Division (UInt16? op1, UInt16? op2) { return (UInt16?)(op1 / op2); } | |
736 public UInt16? Modulus (UInt16? op1, UInt16? op2) { return (UInt16?)(op1 % op2); } | |
737 | |
738 public UInt16? BitwiseAnd (UInt16? op1, UInt16? op2) { return (UInt16?)(op1 & op2); } | |
739 public UInt16? BitwiseOr (UInt16? op1, UInt16? op2) { return (UInt16?)(op1 | op2); } | |
740 public UInt16? ExclusiveOr (UInt16? op1, UInt16? op2) { return (UInt16?)(op1 ^ op2); } | |
741 | |
742 public UInt16? UnaryNegation (UInt16? op) { throw new InvalidOperationException(); } | |
743 public UInt16? OnesComplement (UInt16? op) { return (UInt16?)(~op); } | |
744 | |
745 public bool Equality (UInt16? op1, UInt16? op2) { return op1 == op2; } | |
746 public bool Inequality (UInt16? op1, UInt16? op2) { return op1 != op2; } | |
747 public bool GreaterThan (UInt16? op1, UInt16? op2) { return op1 > op2; } | |
748 public bool GreaterThanOrEqual(UInt16? op1, UInt16? op2) { return op1 >= op2; } | |
749 public bool LessThan (UInt16? op1, UInt16? op2) { return op1 < op2; } | |
750 public bool LessThanOrEqual (UInt16? op1, UInt16? op2) { return op1 <= op2; } | |
751 } | |
752 | |
753 #endregion | |
754 | |
755 #region UInt32 | |
756 | |
757 private class NU32 : IOperable<UInt32?> | |
758 { | |
759 public UInt32? Addition (UInt32? op1, UInt32? op2) { return (op1 + op2); } | |
760 public UInt32? Subtraction (UInt32? op1, UInt32? op2) { return (op1 - op2); } | |
761 public UInt32? Multiply (UInt32? op1, UInt32? op2) { return (op1 * op2); } | |
762 public UInt32? Division (UInt32? op1, UInt32? op2) { return (op1 / op2); } | |
763 public UInt32? Modulus (UInt32? op1, UInt32? op2) { return (op1 % op2); } | |
764 | |
765 public UInt32? BitwiseAnd (UInt32? op1, UInt32? op2) { return (op1 & op2); } | |
766 public UInt32? BitwiseOr (UInt32? op1, UInt32? op2) { return (op1 | op2); } | |
767 public UInt32? ExclusiveOr (UInt32? op1, UInt32? op2) { return (op1 ^ op2); } | |
768 | |
769 public UInt32? UnaryNegation (UInt32? op) { throw new InvalidOperationException(); } | |
770 public UInt32? OnesComplement (UInt32? op) { return (~op); } | |
771 | |
772 public bool Equality (UInt32? op1, UInt32? op2) { return op1 == op2; } | |
773 public bool Inequality (UInt32? op1, UInt32? op2) { return op1 != op2; } | |
774 public bool GreaterThan (UInt32? op1, UInt32? op2) { return op1 > op2; } | |
775 public bool GreaterThanOrEqual(UInt32? op1, UInt32? op2) { return op1 >= op2; } | |
776 public bool LessThan (UInt32? op1, UInt32? op2) { return op1 < op2; } | |
777 public bool LessThanOrEqual (UInt32? op1, UInt32? op2) { return op1 <= op2; } | |
778 } | |
779 | |
780 #endregion | |
781 | |
782 #region UInt64 | |
783 | |
784 private class NU64 : IOperable<UInt64?> | |
785 { | |
786 public UInt64? Addition (UInt64? op1, UInt64? op2) { return (op1 + op2); } | |
787 public UInt64? Subtraction (UInt64? op1, UInt64? op2) { return (op1 - op2); } | |
788 public UInt64? Multiply (UInt64? op1, UInt64? op2) { return (op1 * op2); } | |
789 public UInt64? Division (UInt64? op1, UInt64? op2) { return (op1 / op2); } | |
790 public UInt64? Modulus (UInt64? op1, UInt64? op2) { return (op1 % op2); } | |
791 | |
792 public UInt64? BitwiseAnd (UInt64? op1, UInt64? op2) { return (op1 & op2); } | |
793 public UInt64? BitwiseOr (UInt64? op1, UInt64? op2) { return (op1 | op2); } | |
794 public UInt64? ExclusiveOr (UInt64? op1, UInt64? op2) { return (op1 ^ op2); } | |
795 | |
796 public UInt64? UnaryNegation (UInt64? op) { throw new InvalidOperationException(); } | |
797 public UInt64? OnesComplement (UInt64? op) { return (~op); } | |
798 | |
799 public bool Equality (UInt64? op1, UInt64? op2) { return op1 == op2; } | |
800 public bool Inequality (UInt64? op1, UInt64? op2) { return op1 != op2; } | |
801 public bool GreaterThan (UInt64? op1, UInt64? op2) { return op1 > op2; } | |
802 public bool GreaterThanOrEqual(UInt64? op1, UInt64? op2) { return op1 >= op2; } | |
803 public bool LessThan (UInt64? op1, UInt64? op2) { return op1 < op2; } | |
804 public bool LessThanOrEqual (UInt64? op1, UInt64? op2) { return op1 <= op2; } | |
805 } | |
806 | |
807 #endregion | |
808 | |
809 #region Boolean | |
810 | |
811 private class NB : IOperable<Boolean?> | |
812 { | |
813 public Boolean? Addition (Boolean? op1, Boolean? op2) { throw new InvalidOperationException(); } | |
814 public Boolean? Subtraction (Boolean? op1, Boolean? op2) { throw new InvalidOperationException(); } | |
815 public Boolean? Multiply (Boolean? op1, Boolean? op2) { throw new InvalidOperationException(); } | |
816 public Boolean? Division (Boolean? op1, Boolean? op2) { throw new InvalidOperationException(); } | |
817 public Boolean? Modulus (Boolean? op1, Boolean? op2) { throw new InvalidOperationException(); } | |
818 | |
819 public Boolean? BitwiseAnd (Boolean? op1, Boolean? op2) { return (op1 & op2); } | |
820 public Boolean? BitwiseOr (Boolean? op1, Boolean? op2) { return (op1 | op2); } | |
821 public Boolean? ExclusiveOr (Boolean? op1, Boolean? op2) { return (op1 ^ op2); } | |
822 | |
823 public Boolean? UnaryNegation (Boolean? op) { throw new InvalidOperationException(); } | |
824 public Boolean? OnesComplement(Boolean? op) { return !op; } | |
825 | |
826 public bool Equality (Boolean? op1, Boolean? op2) { return op1 == op2; } | |
827 public bool Inequality (Boolean? op1, Boolean? op2) { return op1 != op2; } | |
828 public bool GreaterThan (Boolean? op1, Boolean? op2) { throw new InvalidOperationException(); } | |
829 public bool GreaterThanOrEqual(Boolean? op1, Boolean? op2) { throw new InvalidOperationException(); } | |
830 public bool LessThan (Boolean? op1, Boolean? op2) { throw new InvalidOperationException(); } | |
831 public bool LessThanOrEqual (Boolean? op1, Boolean? op2) { throw new InvalidOperationException(); } | |
832 } | |
833 | |
834 #endregion | |
835 | |
836 #region Char | |
837 | |
838 private class NC : IOperable<Char?> | |
839 { | |
840 public Char? Addition (Char? op1, Char? op2) { return (Char?)(op1 + op2); } | |
841 public Char? Subtraction (Char? op1, Char? op2) { return (Char?)(op1 - op2); } | |
842 public Char? Multiply (Char? op1, Char? op2) { return (Char?)(op1 * op2); } | |
843 public Char? Division (Char? op1, Char? op2) { return (Char?)(op1 / op2); } | |
844 public Char? Modulus (Char? op1, Char? op2) { return (Char?)(op1 % op2); } | |
845 | |
846 public Char? BitwiseAnd (Char? op1, Char? op2) { return (Char?)(op1 & op2); } | |
847 public Char? BitwiseOr (Char? op1, Char? op2) { return (Char?)(op1 | op2); } | |
848 public Char? ExclusiveOr (Char? op1, Char? op2) { return (Char?)(op1 ^ op2); } | |
849 | |
850 public Char? UnaryNegation (Char? op) { return (Char?)(-op); } | |
851 public Char? OnesComplement (Char? op) { return (Char?)(~op); } | |
852 | |
853 public bool Equality (Char? op1, Char? op2) { return op1 == op2; } | |
854 public bool Inequality (Char? op1, Char? op2) { return op1 != op2; } | |
855 public bool GreaterThan (Char? op1, Char? op2) { return op1 > op2; } | |
856 public bool GreaterThanOrEqual(Char? op1, Char? op2) { return op1 >= op2; } | |
857 public bool LessThan (Char? op1, Char? op2) { return op1 < op2; } | |
858 public bool LessThanOrEqual (Char? op1, Char? op2) { return op1 <= op2; } | |
859 } | |
860 | |
861 #endregion | |
862 | |
863 #region Single | |
864 | |
865 private class NR4 : IOperable<Single?> | |
866 { | |
867 public Single? Addition (Single? op1, Single? op2) { return (op1 + op2); } | |
868 public Single? Subtraction (Single? op1, Single? op2) { return (op1 - op2); } | |
869 public Single? Multiply (Single? op1, Single? op2) { return (op1 * op2); } | |
870 public Single? Division (Single? op1, Single? op2) { return (op1 / op2); } | |
871 public Single? Modulus (Single? op1, Single? op2) { return (op1 % op2); } | |
872 | |
873 public Single? BitwiseAnd (Single? op1, Single? op2) { throw new InvalidOperationException(); } | |
874 public Single? BitwiseOr (Single? op1, Single? op2) { throw new InvalidOperationException(); } | |
875 public Single? ExclusiveOr (Single? op1, Single? op2) { throw new InvalidOperationException(); } | |
876 | |
877 public Single? UnaryNegation (Single? op) { return (- op); } | |
878 public Single? OnesComplement (Single? op) { throw new InvalidOperationException(); } | |
879 | |
880 public bool Equality (Single? op1, Single? op2) { return op1 == op2; } | |
881 public bool Inequality (Single? op1, Single? op2) { return op1 != op2; } | |
882 public bool GreaterThan (Single? op1, Single? op2) { return op1 > op2; } | |
883 public bool GreaterThanOrEqual(Single? op1, Single? op2) { return op1 >= op2; } | |
884 public bool LessThan (Single? op1, Single? op2) { return op1 < op2; } | |
885 public bool LessThanOrEqual (Single? op1, Single? op2) { return op1 <= op2; } | |
886 } | |
887 | |
888 #endregion | |
889 | |
890 #region Double | |
891 | |
892 private class NR8 : IOperable<Double?> | |
893 { | |
894 public Double? Addition (Double? op1, Double? op2) { return (op1 + op2); } | |
895 public Double? Subtraction (Double? op1, Double? op2) { return (op1 - op2); } | |
896 public Double? Multiply (Double? op1, Double? op2) { return (op1 * op2); } | |
897 public Double? Division (Double? op1, Double? op2) { return (op1 / op2); } | |
898 public Double? Modulus (Double? op1, Double? op2) { return (op1 % op2); } | |
899 | |
900 public Double? BitwiseAnd (Double? op1, Double? op2) { throw new InvalidOperationException(); } | |
901 public Double? BitwiseOr (Double? op1, Double? op2) { throw new InvalidOperationException(); } | |
902 public Double? ExclusiveOr (Double? op1, Double? op2) { throw new InvalidOperationException(); } | |
903 | |
904 public Double? UnaryNegation (Double? op) { return (- op); } | |
905 public Double? OnesComplement (Double? op) { throw new InvalidOperationException(); } | |
906 | |
907 public bool Equality (Double? op1, Double? op2) { return op1 == op2; } | |
908 public bool Inequality (Double? op1, Double? op2) { return op1 != op2; } | |
909 public bool GreaterThan (Double? op1, Double? op2) { return op1 > op2; } | |
910 public bool GreaterThanOrEqual(Double? op1, Double? op2) { return op1 >= op2; } | |
911 public bool LessThan (Double? op1, Double? op2) { return op1 < op2; } | |
912 public bool LessThanOrEqual (Double? op1, Double? op2) { return op1 <= op2; } | |
913 } | |
914 | |
915 #endregion | |
916 | |
917 #region Decimal | |
918 | |
919 private class ND : IOperable<Decimal?> | |
920 { | |
921 public Decimal? Addition (Decimal? op1, Decimal? op2) { return (op1 + op2); } | |
922 public Decimal? Subtraction (Decimal? op1, Decimal? op2) { return (op1 - op2); } | |
923 public Decimal? Multiply (Decimal? op1, Decimal? op2) { return (op1 * op2); } | |
924 public Decimal? Division (Decimal? op1, Decimal? op2) { return (op1 / op2); } | |
925 public Decimal? Modulus (Decimal? op1, Decimal? op2) { return (op1 % op2); } | |
926 | |
927 public Decimal? BitwiseAnd (Decimal? op1, Decimal? op2) { throw new InvalidOperationException(); } | |
928 public Decimal? BitwiseOr (Decimal? op1, Decimal? op2) { throw new InvalidOperationException(); } | |
929 public Decimal? ExclusiveOr (Decimal? op1, Decimal? op2) { throw new InvalidOperationException(); } | |
930 | |
931 public Decimal? UnaryNegation (Decimal? op) { return (- op); } | |
932 public Decimal? OnesComplement(Decimal? op) { throw new InvalidOperationException(); } | |
933 | |
934 public bool Equality (Decimal? op1, Decimal? op2) { return op1 == op2; } | |
935 public bool Inequality (Decimal? op1, Decimal? op2) { return op1 != op2; } | |
936 public bool GreaterThan (Decimal? op1, Decimal? op2) { return op1 > op2; } | |
937 public bool GreaterThanOrEqual(Decimal? op1, Decimal? op2) { return op1 >= op2; } | |
938 public bool LessThan (Decimal? op1, Decimal? op2) { return op1 < op2; } | |
939 public bool LessThanOrEqual (Decimal? op1, Decimal? op2) { return op1 <= op2; } | |
940 } | |
941 | |
942 #endregion | |
943 | |
944 #region DateTime | |
945 | |
946 private class NDT : IOperable<DateTime?> | |
947 { | |
948 public DateTime? Addition (DateTime? op1, DateTime? op2) { throw new InvalidOperationException(); } | |
949 public DateTime? Subtraction (DateTime? op1, DateTime? op2) { throw new InvalidOperationException(); } | |
950 public DateTime? Multiply (DateTime? op1, DateTime? op2) { throw new InvalidOperationException(); } | |
951 public DateTime? Division (DateTime? op1, DateTime? op2) { throw new InvalidOperationException(); } | |
952 public DateTime? Modulus (DateTime? op1, DateTime? op2) { throw new InvalidOperationException(); } | |
953 | |
954 public DateTime? BitwiseAnd (DateTime? op1, DateTime? op2) { throw new InvalidOperationException(); } | |
955 public DateTime? BitwiseOr (DateTime? op1, DateTime? op2) { throw new InvalidOperationException(); } | |
956 public DateTime? ExclusiveOr (DateTime? op1, DateTime? op2) { throw new InvalidOperationException(); } | |
957 | |
958 public DateTime? UnaryNegation (DateTime? op) { throw new InvalidOperationException(); } | |
959 public DateTime? OnesComplement(DateTime? op) { throw new InvalidOperationException(); } | |
960 | |
961 public bool Equality (DateTime? op1, DateTime? op2) { return op1 == op2; } | |
962 public bool Inequality (DateTime? op1, DateTime? op2) { return op1 != op2; } | |
963 public bool GreaterThan (DateTime? op1, DateTime? op2) { return op1 > op2; } | |
964 public bool GreaterThanOrEqual (DateTime? op1, DateTime? op2) { return op1 >= op2; } | |
965 public bool LessThan (DateTime? op1, DateTime? op2) { return op1 < op2; } | |
966 public bool LessThanOrEqual (DateTime? op1, DateTime? op2) { return op1 <= op2; } | |
967 } | |
968 | |
969 #endregion | |
970 | |
971 #region TimeSpan | |
972 | |
973 private class NTS : IOperable<TimeSpan?> | |
974 { | |
975 public TimeSpan? Addition (TimeSpan? op1, TimeSpan? op2) { return (op1 + op2); } | |
976 public TimeSpan? Subtraction (TimeSpan? op1, TimeSpan? op2) { return (op1 - op2); } | |
977 public TimeSpan? Multiply (TimeSpan? op1, TimeSpan? op2) { throw new InvalidOperationException(); } | |
978 public TimeSpan? Division (TimeSpan? op1, TimeSpan? op2) { throw new InvalidOperationException(); } | |
979 public TimeSpan? Modulus (TimeSpan? op1, TimeSpan? op2) { throw new InvalidOperationException(); } | |
980 | |
981 public TimeSpan? BitwiseAnd (TimeSpan? op1, TimeSpan? op2) { throw new InvalidOperationException(); } | |
982 public TimeSpan? BitwiseOr (TimeSpan? op1, TimeSpan? op2) { throw new InvalidOperationException(); } | |
983 public TimeSpan? ExclusiveOr (TimeSpan? op1, TimeSpan? op2) { throw new InvalidOperationException(); } | |
984 | |
985 public TimeSpan? UnaryNegation (TimeSpan? op) { return (- op); } | |
986 public TimeSpan? OnesComplement(TimeSpan? op) { throw new InvalidOperationException(); } | |
987 | |
988 public bool Equality (TimeSpan? op1, TimeSpan? op2) { return op1 == op2; } | |
989 public bool Inequality (TimeSpan? op1, TimeSpan? op2) { return op1 != op2; } | |
990 public bool GreaterThan (TimeSpan? op1, TimeSpan? op2) { return op1 > op2; } | |
991 public bool GreaterThanOrEqual (TimeSpan? op1, TimeSpan? op2) { return op1 >= op2; } | |
992 public bool LessThan (TimeSpan? op1, TimeSpan? op2) { return op1 < op2; } | |
993 public bool LessThanOrEqual (TimeSpan? op1, TimeSpan? op2) { return op1 <= op2; } | |
994 } | |
995 | |
996 #endregion | |
997 | |
998 #region Guid? | |
999 | |
1000 private class NG : IOperable<Guid?> | |
1001 { | |
1002 public Guid? Addition (Guid? op1, Guid? op2) { throw new InvalidOperationException(); } | |
1003 public Guid? Subtraction (Guid? op1, Guid? op2) { throw new InvalidOperationException(); } | |
1004 public Guid? Multiply (Guid? op1, Guid? op2) { throw new InvalidOperationException(); } | |
1005 public Guid? Division (Guid? op1, Guid? op2) { throw new InvalidOperationException(); } | |
1006 public Guid? Modulus (Guid? op1, Guid? op2) { throw new InvalidOperationException(); } | |
1007 | |
1008 public Guid? BitwiseAnd (Guid? op1, Guid? op2) { throw new InvalidOperationException(); } | |
1009 public Guid? BitwiseOr (Guid? op1, Guid? op2) { throw new InvalidOperationException(); } | |
1010 public Guid? ExclusiveOr (Guid? op1, Guid? op2) { throw new InvalidOperationException(); } | |
1011 | |
1012 public Guid? UnaryNegation (Guid? op) { throw new InvalidOperationException(); } | |
1013 public Guid? OnesComplement (Guid? op) { throw new InvalidOperationException(); } | |
1014 | |
1015 public bool Equality (Guid? op1, Guid? op2) { return op1 == op2; } | |
1016 public bool Inequality (Guid? op1, Guid? op2) { return op1 != op2; } | |
1017 public bool GreaterThan (Guid? op1, Guid? op2) { throw new InvalidOperationException(); } | |
1018 public bool GreaterThanOrEqual(Guid? op1, Guid? op2) { throw new InvalidOperationException(); } | |
1019 public bool LessThan (Guid? op1, Guid? op2) { throw new InvalidOperationException(); } | |
1020 public bool LessThanOrEqual (Guid? op1, Guid? op2) { throw new InvalidOperationException(); } | |
1021 } | |
1022 | |
1023 #endregion | |
1024 | |
1025 #endregion | |
1026 | |
1027 #region Sql types. | |
1028 | |
1029 #region SqlString | |
1030 | |
1031 private class DBS : IOperable<SqlString> | |
1032 { | |
1033 public SqlString Addition (SqlString op1, SqlString op2) { return (op1 + op2); } | |
1034 public SqlString Subtraction (SqlString op1, SqlString op2) { throw new InvalidOperationException(); } | |
1035 public SqlString Multiply (SqlString op1, SqlString op2) { throw new InvalidOperationException(); } | |
1036 public SqlString Division (SqlString op1, SqlString op2) { throw new InvalidOperationException(); } | |
1037 public SqlString Modulus (SqlString op1, SqlString op2) { throw new InvalidOperationException(); } | |
1038 | |
1039 public SqlString BitwiseAnd (SqlString op1, SqlString op2) { throw new InvalidOperationException(); } | |
1040 public SqlString BitwiseOr (SqlString op1, SqlString op2) { throw new InvalidOperationException(); } | |
1041 public SqlString ExclusiveOr (SqlString op1, SqlString op2) { throw new InvalidOperationException(); } | |
1042 | |
1043 public SqlString UnaryNegation (SqlString op) { throw new InvalidOperationException(); } | |
1044 public SqlString OnesComplement(SqlString op) { throw new InvalidOperationException(); } | |
1045 | |
1046 public bool Equality (SqlString op1, SqlString op2) { return (op1 == op2).IsTrue; } | |
1047 public bool Inequality (SqlString op1, SqlString op2) { return (op1 != op2).IsTrue; } | |
1048 public bool GreaterThan (SqlString op1, SqlString op2) { throw new InvalidOperationException(); } | |
1049 public bool GreaterThanOrEqual (SqlString op1, SqlString op2) { throw new InvalidOperationException(); } | |
1050 public bool LessThan (SqlString op1, SqlString op2) { throw new InvalidOperationException(); } | |
1051 public bool LessThanOrEqual (SqlString op1, SqlString op2) { throw new InvalidOperationException(); } | |
1052 } | |
1053 | |
1054 #endregion | |
1055 | |
1056 #region SqlByte | |
1057 | |
1058 private class DBU8 : IOperable<SqlByte> | |
1059 { | |
1060 public SqlByte Addition (SqlByte op1, SqlByte op2) { return (op1 + op2); } | |
1061 public SqlByte Subtraction (SqlByte op1, SqlByte op2) { return (op1 - op2); } | |
1062 public SqlByte Multiply (SqlByte op1, SqlByte op2) { return (op1 * op2); } | |
1063 public SqlByte Division (SqlByte op1, SqlByte op2) { return (op1 / op2); } | |
1064 public SqlByte Modulus (SqlByte op1, SqlByte op2) { return (op1 % op2); } | |
1065 | |
1066 public SqlByte BitwiseAnd (SqlByte op1, SqlByte op2) { return (op1 & op2); } | |
1067 public SqlByte BitwiseOr (SqlByte op1, SqlByte op2) { return (op1 | op2); } | |
1068 public SqlByte ExclusiveOr (SqlByte op1, SqlByte op2) { return (op1 ^ op2); } | |
1069 | |
1070 public SqlByte UnaryNegation (SqlByte op) { throw new InvalidOperationException(); } | |
1071 public SqlByte OnesComplement (SqlByte op) { return (~op); } | |
1072 | |
1073 public bool Equality (SqlByte op1, SqlByte op2) { return (op1 == op2).IsTrue; } | |
1074 public bool Inequality (SqlByte op1, SqlByte op2) { return (op1 != op2).IsTrue; } | |
1075 public bool GreaterThan (SqlByte op1, SqlByte op2) { return (op1 > op2).IsTrue; } | |
1076 public bool GreaterThanOrEqual(SqlByte op1, SqlByte op2) { return (op1 >= op2).IsTrue; } | |
1077 public bool LessThan (SqlByte op1, SqlByte op2) { return (op1 < op2).IsTrue; } | |
1078 public bool LessThanOrEqual (SqlByte op1, SqlByte op2) { return (op1 <= op2).IsTrue; } | |
1079 } | |
1080 | |
1081 #endregion | |
1082 | |
1083 #region Int16 | |
1084 | |
1085 private class DBS16 : IOperable<SqlInt16> | |
1086 { | |
1087 public SqlInt16 Addition (SqlInt16 op1, SqlInt16 op2) { return (op1 + op2); } | |
1088 public SqlInt16 Subtraction (SqlInt16 op1, SqlInt16 op2) { return (op1 - op2); } | |
1089 public SqlInt16 Multiply (SqlInt16 op1, SqlInt16 op2) { return (op1 * op2); } | |
1090 public SqlInt16 Division (SqlInt16 op1, SqlInt16 op2) { return (op1 / op2); } | |
1091 public SqlInt16 Modulus (SqlInt16 op1, SqlInt16 op2) { return (op1 % op2); } | |
1092 | |
1093 public SqlInt16 BitwiseAnd (SqlInt16 op1, SqlInt16 op2) { return (op1 & op2); } | |
1094 public SqlInt16 BitwiseOr (SqlInt16 op1, SqlInt16 op2) { return (op1 | op2); } | |
1095 public SqlInt16 ExclusiveOr (SqlInt16 op1, SqlInt16 op2) { return (op1 ^ op2); } | |
1096 | |
1097 public SqlInt16 UnaryNegation (SqlInt16 op) { return (-op); } | |
1098 public SqlInt16 OnesComplement(SqlInt16 op) { return (~op); } | |
1099 | |
1100 public bool Equality (SqlInt16 op1, SqlInt16 op2) { return (op1 == op2).IsTrue; } | |
1101 public bool Inequality (SqlInt16 op1, SqlInt16 op2) { return (op1 != op2).IsTrue; } | |
1102 public bool GreaterThan (SqlInt16 op1, SqlInt16 op2) { return (op1 > op2).IsTrue; } | |
1103 public bool GreaterThanOrEqual(SqlInt16 op1, SqlInt16 op2) { return (op1 >= op2).IsTrue; } | |
1104 public bool LessThan (SqlInt16 op1, SqlInt16 op2) { return (op1 < op2).IsTrue; } | |
1105 public bool LessThanOrEqual (SqlInt16 op1, SqlInt16 op2) { return (op1 <= op2).IsTrue; } | |
1106 } | |
1107 | |
1108 #endregion | |
1109 | |
1110 #region SqlInt32 | |
1111 | |
1112 private class DBS32 : IOperable<SqlInt32> | |
1113 { | |
1114 public SqlInt32 Addition (SqlInt32 op1, SqlInt32 op2) { return (op1 + op2); } | |
1115 public SqlInt32 Subtraction (SqlInt32 op1, SqlInt32 op2) { return (op1 - op2); } | |
1116 public SqlInt32 Multiply (SqlInt32 op1, SqlInt32 op2) { return (op1 * op2); } | |
1117 public SqlInt32 Division (SqlInt32 op1, SqlInt32 op2) { return (op1 / op2); } | |
1118 public SqlInt32 Modulus (SqlInt32 op1, SqlInt32 op2) { return (op1 % op2); } | |
1119 | |
1120 public SqlInt32 BitwiseAnd (SqlInt32 op1, SqlInt32 op2) { return (op1 & op2); } | |
1121 public SqlInt32 BitwiseOr (SqlInt32 op1, SqlInt32 op2) { return (op1 | op2); } | |
1122 public SqlInt32 ExclusiveOr (SqlInt32 op1, SqlInt32 op2) { return (op1 ^ op2); } | |
1123 | |
1124 public SqlInt32 UnaryNegation (SqlInt32 op) { return (-op); } | |
1125 public SqlInt32 OnesComplement(SqlInt32 op) { return (~op); } | |
1126 | |
1127 public bool Equality (SqlInt32 op1, SqlInt32 op2) { return (op1 == op2).IsTrue; } | |
1128 public bool Inequality (SqlInt32 op1, SqlInt32 op2) { return (op1 != op2).IsTrue; } | |
1129 public bool GreaterThan (SqlInt32 op1, SqlInt32 op2) { return (op1 > op2).IsTrue; } | |
1130 public bool GreaterThanOrEqual(SqlInt32 op1, SqlInt32 op2) { return (op1 >= op2).IsTrue; } | |
1131 public bool LessThan (SqlInt32 op1, SqlInt32 op2) { return (op1 < op2).IsTrue; } | |
1132 public bool LessThanOrEqual (SqlInt32 op1, SqlInt32 op2) { return (op1 <= op2).IsTrue; } | |
1133 } | |
1134 | |
1135 #endregion | |
1136 | |
1137 #region SqlInt64 | |
1138 | |
1139 private class DBS64 : IOperable<SqlInt64> | |
1140 { | |
1141 public SqlInt64 Addition (SqlInt64 op1, SqlInt64 op2) { return (op1 + op2); } | |
1142 public SqlInt64 Subtraction (SqlInt64 op1, SqlInt64 op2) { return (op1 - op2); } | |
1143 public SqlInt64 Multiply (SqlInt64 op1, SqlInt64 op2) { return (op1 * op2); } | |
1144 public SqlInt64 Division (SqlInt64 op1, SqlInt64 op2) { return (op1 / op2); } | |
1145 public SqlInt64 Modulus (SqlInt64 op1, SqlInt64 op2) { return (op1 % op2); } | |
1146 | |
1147 public SqlInt64 BitwiseAnd (SqlInt64 op1, SqlInt64 op2) { return (op1 & op2); } | |
1148 public SqlInt64 BitwiseOr (SqlInt64 op1, SqlInt64 op2) { return (op1 | op2); } | |
1149 public SqlInt64 ExclusiveOr (SqlInt64 op1, SqlInt64 op2) { return (op1 ^ op2); } | |
1150 | |
1151 public SqlInt64 UnaryNegation (SqlInt64 op) { return (-op); } | |
1152 public SqlInt64 OnesComplement(SqlInt64 op) { return (~op); } | |
1153 | |
1154 public bool Equality (SqlInt64 op1, SqlInt64 op2) { return (op1 == op2).IsTrue; } | |
1155 public bool Inequality (SqlInt64 op1, SqlInt64 op2) { return (op1 != op2).IsTrue; } | |
1156 public bool GreaterThan (SqlInt64 op1, SqlInt64 op2) { return (op1 > op2).IsTrue; } | |
1157 public bool GreaterThanOrEqual(SqlInt64 op1, SqlInt64 op2) { return (op1 >= op2).IsTrue; } | |
1158 public bool LessThan (SqlInt64 op1, SqlInt64 op2) { return (op1 < op2).IsTrue; } | |
1159 public bool LessThanOrEqual (SqlInt64 op1, SqlInt64 op2) { return (op1 <= op2).IsTrue; } | |
1160 } | |
1161 | |
1162 #endregion | |
1163 | |
1164 #region SqlBoolean | |
1165 | |
1166 private class DBB : IOperable<SqlBoolean> | |
1167 { | |
1168 public SqlBoolean Addition (SqlBoolean op1, SqlBoolean op2) { throw new InvalidOperationException(); } | |
1169 public SqlBoolean Subtraction (SqlBoolean op1, SqlBoolean op2) { throw new InvalidOperationException(); } | |
1170 public SqlBoolean Multiply (SqlBoolean op1, SqlBoolean op2) { throw new InvalidOperationException(); } | |
1171 public SqlBoolean Division (SqlBoolean op1, SqlBoolean op2) { throw new InvalidOperationException(); } | |
1172 public SqlBoolean Modulus (SqlBoolean op1, SqlBoolean op2) { throw new InvalidOperationException(); } | |
1173 | |
1174 public SqlBoolean BitwiseAnd (SqlBoolean op1, SqlBoolean op2) { return (op1 & op2); } | |
1175 public SqlBoolean BitwiseOr (SqlBoolean op1, SqlBoolean op2) { return (op1 | op2); } | |
1176 public SqlBoolean ExclusiveOr (SqlBoolean op1, SqlBoolean op2) { return (op1 ^ op2); } | |
1177 | |
1178 public SqlBoolean UnaryNegation (SqlBoolean op) { throw new InvalidOperationException(); } | |
1179 public SqlBoolean OnesComplement(SqlBoolean op) { return !op; } | |
1180 | |
1181 public bool Equality (SqlBoolean op1, SqlBoolean op2) { return (op1 == op2).IsTrue; } | |
1182 public bool Inequality (SqlBoolean op1, SqlBoolean op2) { return (op1 != op2).IsTrue; } | |
1183 public bool GreaterThan (SqlBoolean op1, SqlBoolean op2) { throw new InvalidOperationException(); } | |
1184 public bool GreaterThanOrEqual (SqlBoolean op1, SqlBoolean op2) { throw new InvalidOperationException(); } | |
1185 public bool LessThan (SqlBoolean op1, SqlBoolean op2) { throw new InvalidOperationException(); } | |
1186 public bool LessThanOrEqual (SqlBoolean op1, SqlBoolean op2) { throw new InvalidOperationException(); } | |
1187 } | |
1188 | |
1189 #endregion | |
1190 | |
1191 #region SqlSingle | |
1192 | |
1193 private class DBR4 : IOperable<SqlSingle> | |
1194 { | |
1195 public SqlSingle Addition (SqlSingle op1, SqlSingle op2) { return (op1 + op2); } | |
1196 public SqlSingle Subtraction (SqlSingle op1, SqlSingle op2) { return (op1 - op2); } | |
1197 public SqlSingle Multiply (SqlSingle op1, SqlSingle op2) { return (op1 * op2); } | |
1198 public SqlSingle Division (SqlSingle op1, SqlSingle op2) { return (op1 / op2); } | |
1199 public SqlSingle Modulus (SqlSingle op1, SqlSingle op2) { throw new InvalidOperationException(); } | |
1200 | |
1201 public SqlSingle BitwiseAnd (SqlSingle op1, SqlSingle op2) { throw new InvalidOperationException(); } | |
1202 public SqlSingle BitwiseOr (SqlSingle op1, SqlSingle op2) { throw new InvalidOperationException(); } | |
1203 public SqlSingle ExclusiveOr (SqlSingle op1, SqlSingle op2) { throw new InvalidOperationException(); } | |
1204 | |
1205 public SqlSingle UnaryNegation (SqlSingle op) { return (-op); } | |
1206 public SqlSingle OnesComplement(SqlSingle op) { throw new InvalidOperationException(); } | |
1207 | |
1208 public bool Equality (SqlSingle op1, SqlSingle op2) { return (op1 == op2).IsTrue; } | |
1209 public bool Inequality (SqlSingle op1, SqlSingle op2) { return (op1 != op2).IsTrue; } | |
1210 public bool GreaterThan (SqlSingle op1, SqlSingle op2) { return (op1 > op2).IsTrue; } | |
1211 public bool GreaterThanOrEqual (SqlSingle op1, SqlSingle op2) { return (op1 >= op2).IsTrue; } | |
1212 public bool LessThan (SqlSingle op1, SqlSingle op2) { return (op1 < op2).IsTrue; } | |
1213 public bool LessThanOrEqual (SqlSingle op1, SqlSingle op2) { return (op1 <= op2).IsTrue; } | |
1214 } | |
1215 | |
1216 #endregion | |
1217 | |
1218 #region SqlDouble | |
1219 | |
1220 private class DBR8 : IOperable<SqlDouble> | |
1221 { | |
1222 public SqlDouble Addition (SqlDouble op1, SqlDouble op2) { return (op1 + op2); } | |
1223 public SqlDouble Subtraction (SqlDouble op1, SqlDouble op2) { return (op1 - op2); } | |
1224 public SqlDouble Multiply (SqlDouble op1, SqlDouble op2) { return (op1 * op2); } | |
1225 public SqlDouble Division (SqlDouble op1, SqlDouble op2) { return (op1 / op2); } | |
1226 public SqlDouble Modulus (SqlDouble op1, SqlDouble op2) { throw new InvalidOperationException(); } | |
1227 | |
1228 public SqlDouble BitwiseAnd (SqlDouble op1, SqlDouble op2) { throw new InvalidOperationException(); } | |
1229 public SqlDouble BitwiseOr (SqlDouble op1, SqlDouble op2) { throw new InvalidOperationException(); } | |
1230 public SqlDouble ExclusiveOr (SqlDouble op1, SqlDouble op2) { throw new InvalidOperationException(); } | |
1231 | |
1232 public SqlDouble UnaryNegation (SqlDouble op) { return (-op); } | |
1233 public SqlDouble OnesComplement(SqlDouble op) { throw new InvalidOperationException(); } | |
1234 | |
1235 public bool Equality (SqlDouble op1, SqlDouble op2) { return (op1 == op2).IsTrue; } | |
1236 public bool Inequality (SqlDouble op1, SqlDouble op2) { return (op1 != op2).IsTrue; } | |
1237 public bool GreaterThan (SqlDouble op1, SqlDouble op2) { return (op1 > op2).IsTrue; } | |
1238 public bool GreaterThanOrEqual (SqlDouble op1, SqlDouble op2) { return (op1 >= op2).IsTrue; } | |
1239 public bool LessThan (SqlDouble op1, SqlDouble op2) { return (op1 < op2).IsTrue; } | |
1240 public bool LessThanOrEqual (SqlDouble op1, SqlDouble op2) { return (op1 <= op2).IsTrue; } | |
1241 } | |
1242 | |
1243 #endregion | |
1244 | |
1245 #region SqlDecimal | |
1246 | |
1247 private class DBD : IOperable<SqlDecimal> | |
1248 { | |
1249 public SqlDecimal Addition (SqlDecimal op1, SqlDecimal op2) { return (op1 + op2); } | |
1250 public SqlDecimal Subtraction (SqlDecimal op1, SqlDecimal op2) { return (op1 - op2); } | |
1251 public SqlDecimal Multiply (SqlDecimal op1, SqlDecimal op2) { return (op1 * op2); } | |
1252 public SqlDecimal Division (SqlDecimal op1, SqlDecimal op2) { return (op1 / op2); } | |
1253 public SqlDecimal Modulus (SqlDecimal op1, SqlDecimal op2) { throw new InvalidOperationException(); } | |
1254 | |
1255 public SqlDecimal BitwiseAnd (SqlDecimal op1, SqlDecimal op2) { throw new InvalidOperationException(); } | |
1256 public SqlDecimal BitwiseOr (SqlDecimal op1, SqlDecimal op2) { throw new InvalidOperationException(); } | |
1257 public SqlDecimal ExclusiveOr (SqlDecimal op1, SqlDecimal op2) { throw new InvalidOperationException(); } | |
1258 | |
1259 public SqlDecimal UnaryNegation (SqlDecimal op) { return (-op); } | |
1260 public SqlDecimal OnesComplement(SqlDecimal op) { throw new InvalidOperationException(); } | |
1261 | |
1262 public bool Equality (SqlDecimal op1, SqlDecimal op2) { return (op1 == op2).IsTrue; } | |
1263 public bool Inequality (SqlDecimal op1, SqlDecimal op2) { return (op1 != op2).IsTrue; } | |
1264 public bool GreaterThan (SqlDecimal op1, SqlDecimal op2) { return (op1 > op2).IsTrue; } | |
1265 public bool GreaterThanOrEqual (SqlDecimal op1, SqlDecimal op2) { return (op1 >= op2).IsTrue; } | |
1266 public bool LessThan (SqlDecimal op1, SqlDecimal op2) { return (op1 < op2).IsTrue; } | |
1267 public bool LessThanOrEqual (SqlDecimal op1, SqlDecimal op2) { return (op1 <= op2).IsTrue; } | |
1268 } | |
1269 | |
1270 #endregion | |
1271 | |
1272 #region SqlMoney | |
1273 | |
1274 private class DBM : IOperable<SqlMoney> | |
1275 { | |
1276 public SqlMoney Addition (SqlMoney op1, SqlMoney op2) { return (op1 + op2); } | |
1277 public SqlMoney Subtraction (SqlMoney op1, SqlMoney op2) { return (op1 - op2); } | |
1278 public SqlMoney Multiply (SqlMoney op1, SqlMoney op2) { return (op1 * op2); } | |
1279 public SqlMoney Division (SqlMoney op1, SqlMoney op2) { return (op1 / op2); } | |
1280 public SqlMoney Modulus (SqlMoney op1, SqlMoney op2) { throw new InvalidOperationException(); } | |
1281 | |
1282 public SqlMoney BitwiseAnd (SqlMoney op1, SqlMoney op2) { throw new InvalidOperationException(); } | |
1283 public SqlMoney BitwiseOr (SqlMoney op1, SqlMoney op2) { throw new InvalidOperationException(); } | |
1284 public SqlMoney ExclusiveOr (SqlMoney op1, SqlMoney op2) { throw new InvalidOperationException(); } | |
1285 | |
1286 public SqlMoney UnaryNegation (SqlMoney op) { return (-op); } | |
1287 public SqlMoney OnesComplement(SqlMoney op) { throw new InvalidOperationException(); } | |
1288 | |
1289 public bool Equality (SqlMoney op1, SqlMoney op2) { return (op1 == op2).IsTrue; } | |
1290 public bool Inequality (SqlMoney op1, SqlMoney op2) { return (op1 != op2).IsTrue; } | |
1291 public bool GreaterThan (SqlMoney op1, SqlMoney op2) { return (op1 > op2).IsTrue; } | |
1292 public bool GreaterThanOrEqual(SqlMoney op1, SqlMoney op2) { return (op1 >= op2).IsTrue; } | |
1293 public bool LessThan (SqlMoney op1, SqlMoney op2) { return (op1 < op2).IsTrue; } | |
1294 public bool LessThanOrEqual (SqlMoney op1, SqlMoney op2) { return (op1 <= op2).IsTrue; } | |
1295 } | |
1296 | |
1297 #endregion | |
1298 | |
1299 #region SqlDateTime | |
1300 | |
1301 private class DBDT : IOperable<SqlDateTime> | |
1302 { | |
1303 public SqlDateTime Addition (SqlDateTime op1, SqlDateTime op2) { throw new InvalidOperationException(); } | |
1304 public SqlDateTime Subtraction (SqlDateTime op1, SqlDateTime op2) { throw new InvalidOperationException(); } | |
1305 public SqlDateTime Multiply (SqlDateTime op1, SqlDateTime op2) { throw new InvalidOperationException(); } | |
1306 public SqlDateTime Division (SqlDateTime op1, SqlDateTime op2) { throw new InvalidOperationException(); } | |
1307 public SqlDateTime Modulus (SqlDateTime op1, SqlDateTime op2) { throw new InvalidOperationException(); } | |
1308 | |
1309 public SqlDateTime BitwiseAnd (SqlDateTime op1, SqlDateTime op2) { throw new InvalidOperationException(); } | |
1310 public SqlDateTime BitwiseOr (SqlDateTime op1, SqlDateTime op2) { throw new InvalidOperationException(); } | |
1311 public SqlDateTime ExclusiveOr (SqlDateTime op1, SqlDateTime op2) { throw new InvalidOperationException(); } | |
1312 | |
1313 public SqlDateTime UnaryNegation (SqlDateTime op) { throw new InvalidOperationException(); } | |
1314 public SqlDateTime OnesComplement(SqlDateTime op) { throw new InvalidOperationException(); } | |
1315 | |
1316 public bool Equality (SqlDateTime op1, SqlDateTime op2) { return (op1 == op2).IsTrue; } | |
1317 public bool Inequality (SqlDateTime op1, SqlDateTime op2) { return (op1 != op2).IsTrue; } | |
1318 public bool GreaterThan (SqlDateTime op1, SqlDateTime op2) { return (op1 > op2).IsTrue; } | |
1319 public bool GreaterThanOrEqual (SqlDateTime op1, SqlDateTime op2) { return (op1 >= op2).IsTrue; } | |
1320 public bool LessThan (SqlDateTime op1, SqlDateTime op2) { return (op1 < op2).IsTrue; } | |
1321 public bool LessThanOrEqual (SqlDateTime op1, SqlDateTime op2) { return (op1 <= op2).IsTrue; } | |
1322 } | |
1323 | |
1324 #endregion | |
1325 | |
1326 #region SqlBinary | |
1327 | |
1328 private class DBBin : IOperable<SqlBinary> | |
1329 { | |
1330 public SqlBinary Addition (SqlBinary op1, SqlBinary op2) { return (op1 + op2); } | |
1331 public SqlBinary Subtraction (SqlBinary op1, SqlBinary op2) { throw new InvalidOperationException(); } | |
1332 public SqlBinary Multiply (SqlBinary op1, SqlBinary op2) { throw new InvalidOperationException(); } | |
1333 public SqlBinary Division (SqlBinary op1, SqlBinary op2) { throw new InvalidOperationException(); } | |
1334 public SqlBinary Modulus (SqlBinary op1, SqlBinary op2) { throw new InvalidOperationException(); } | |
1335 | |
1336 public SqlBinary BitwiseAnd (SqlBinary op1, SqlBinary op2) { throw new InvalidOperationException(); } | |
1337 public SqlBinary BitwiseOr (SqlBinary op1, SqlBinary op2) { throw new InvalidOperationException(); } | |
1338 public SqlBinary ExclusiveOr (SqlBinary op1, SqlBinary op2) { throw new InvalidOperationException(); } | |
1339 | |
1340 public SqlBinary UnaryNegation (SqlBinary op) { throw new InvalidOperationException(); } | |
1341 public SqlBinary OnesComplement(SqlBinary op) { throw new InvalidOperationException(); } | |
1342 | |
1343 public bool Equality (SqlBinary op1, SqlBinary op2) { return (op1 == op2).IsTrue; } | |
1344 public bool Inequality (SqlBinary op1, SqlBinary op2) { return (op1 != op2).IsTrue; } | |
1345 public bool GreaterThan (SqlBinary op1, SqlBinary op2) { return (op1 > op2).IsTrue; } | |
1346 public bool GreaterThanOrEqual (SqlBinary op1, SqlBinary op2) { return (op1 >= op2).IsTrue; } | |
1347 public bool LessThan (SqlBinary op1, SqlBinary op2) { return (op1 < op2).IsTrue; } | |
1348 public bool LessThanOrEqual (SqlBinary op1, SqlBinary op2) { return (op1 <= op2).IsTrue; } | |
1349 } | |
1350 | |
1351 #endregion | |
1352 | |
1353 #region SqlGuid | |
1354 | |
1355 private class DBG : IOperable<SqlGuid> | |
1356 { | |
1357 public SqlGuid Addition (SqlGuid op1, SqlGuid op2) { throw new InvalidOperationException(); } | |
1358 public SqlGuid Subtraction (SqlGuid op1, SqlGuid op2) { throw new InvalidOperationException(); } | |
1359 public SqlGuid Multiply (SqlGuid op1, SqlGuid op2) { throw new InvalidOperationException(); } | |
1360 public SqlGuid Division (SqlGuid op1, SqlGuid op2) { throw new InvalidOperationException(); } | |
1361 public SqlGuid Modulus (SqlGuid op1, SqlGuid op2) { throw new InvalidOperationException(); } | |
1362 | |
1363 public SqlGuid BitwiseAnd (SqlGuid op1, SqlGuid op2) { throw new InvalidOperationException(); } | |
1364 public SqlGuid BitwiseOr (SqlGuid op1, SqlGuid op2) { throw new InvalidOperationException(); } | |
1365 public SqlGuid ExclusiveOr (SqlGuid op1, SqlGuid op2) { throw new InvalidOperationException(); } | |
1366 | |
1367 public SqlGuid UnaryNegation (SqlGuid op) { throw new InvalidOperationException(); } | |
1368 public SqlGuid OnesComplement (SqlGuid op) { throw new InvalidOperationException(); } | |
1369 | |
1370 public bool Equality (SqlGuid op1, SqlGuid op2) { return (op1 == op2).IsTrue; } | |
1371 public bool Inequality (SqlGuid op1, SqlGuid op2) { return (op1 != op2).IsTrue; } | |
1372 public bool GreaterThan (SqlGuid op1, SqlGuid op2) { return (op1 > op2).IsTrue; } | |
1373 public bool GreaterThanOrEqual(SqlGuid op1, SqlGuid op2) { return (op1 >= op2).IsTrue; } | |
1374 public bool LessThan (SqlGuid op1, SqlGuid op2) { return (op1 < op2).IsTrue; } | |
1375 public bool LessThanOrEqual (SqlGuid op1, SqlGuid op2) { return (op1 <= op2).IsTrue; } | |
1376 } | |
1377 | |
1378 #endregion | |
1379 | |
1380 #endregion | |
1381 } | |
1382 | |
1383 public static class Operator | |
1384 { | |
1385 public static T Addition <T>(T a, T b) { return Operator<T>.Op.Addition (a, b); } | |
1386 public static T Subtraction <T>(T a, T b) { return Operator<T>.Op.Subtraction (a, b); } | |
1387 public static T Multiply <T>(T a, T b) { return Operator<T>.Op.Multiply (a, b); } | |
1388 public static T Division <T>(T a, T b) { return Operator<T>.Op.Division (a, b); } | |
1389 public static T Modulus <T>(T a, T b) { return Operator<T>.Op.Modulus (a, b); } | |
1390 | |
1391 public static T BitwiseAnd <T>(T a, T b) { return Operator<T>.Op.BitwiseAnd (a, b); } | |
1392 public static T BitwiseOr <T>(T a, T b) { return Operator<T>.Op.BitwiseOr (a, b); } | |
1393 public static T ExclusiveOr <T>(T a, T b) { return Operator<T>.Op.ExclusiveOr (a, b); } | |
1394 | |
1395 public static T UnaryNegation <T>(T a) { return Operator<T>.Op.UnaryNegation (a); } | |
1396 public static T OnesComplement <T>(T a) { return Operator<T>.Op.OnesComplement (a); } | |
1397 | |
1398 public static bool Equality <T>(T a, T b) { return Operator<T>.Op.Equality (a, b); } | |
1399 public static bool Inequality <T>(T a, T b) { return Operator<T>.Op.Inequality (a, b); } | |
1400 public static bool GreaterThan <T>(T a, T b) { return Operator<T>.Op.GreaterThan (a, b); } | |
1401 public static bool GreaterThanOrEqual<T>(T a, T b) { return Operator<T>.Op.GreaterThanOrEqual(a, b); } | |
1402 public static bool LessThan <T>(T a, T b) { return Operator<T>.Op.LessThan (a, b); } | |
1403 public static bool LessThanOrEqual <T>(T a, T b) { return Operator<T>.Op.LessThanOrEqual (a, b); } | |
1404 } | |
1405 } |