コード例 #1
0
ファイル: Int64Value.cs プロジェクト: formylover/de4dot-1
 public static Bool3 CompareLe(Int64Value a, Int64Value b)
 {
     if (a.AllBitsValid() && b.AllBitsValid())
     {
         return(a.Value <= b.Value ? Bool3.True : Bool3.False);
     }
     if (a.HasValue(long.MinValue))
     {
         return(Bool3.True);                     // min <= x => true
     }
     if (b.HasValue(long.MaxValue))
     {
         return(Bool3.True);                     // x <= max => true
     }
     return(Bool3.Unknown);
 }
コード例 #2
0
ファイル: Int64Value.cs プロジェクト: formylover/de4dot-1
 public static Bool3 CompareLt_Un(Int64Value a, Int64Value b)
 {
     if (a.AllBitsValid() && b.AllBitsValid())
     {
         return((ulong)a.Value < (ulong)b.Value ? Bool3.True : Bool3.False);
     }
     if (a.HasValue(ulong.MaxValue))
     {
         return(Bool3.False);                    // max < x => false
     }
     if (b.HasValue(ulong.MinValue))
     {
         return(Bool3.False);                    // x < min => false
     }
     return(Bool3.Unknown);
 }
コード例 #3
0
ファイル: Int64Value.cs プロジェクト: formylover/de4dot-1
 public static Bool3 CompareGt(Int64Value a, Int64Value b)
 {
     if (a.AllBitsValid() && b.AllBitsValid())
     {
         return(a.Value > b.Value ? Bool3.True : Bool3.False);
     }
     if (a.HasValue(long.MinValue))
     {
         return(Bool3.False);                    // min > x => false
     }
     if (b.HasValue(long.MaxValue))
     {
         return(Bool3.False);                    // x > max => false
     }
     return(Bool3.Unknown);
 }
コード例 #4
0
ファイル: Int64Value.cs プロジェクト: formylover/de4dot-1
 public static Int64Value Rem_Un(Int64Value a, Int64Value b)
 {
     if (a.AllBitsValid() && b.AllBitsValid())
     {
         try {
             return(new Int64Value((long)((ulong)a.Value % (ulong)b.Value)));
         }
         catch (ArithmeticException) {
             return(CreateUnknown());
         }
     }
     if ((ReferenceEquals(a, b) && a.IsNonZero()) || b.HasValue(1))
     {
         return(Zero);
     }
     return(CreateUnknown());
 }
コード例 #5
0
ファイル: Int64Value.cs プロジェクト: formylover/de4dot-1
 public static Int64Value Mul(Int64Value a, Int64Value b)
 {
     if (a.AllBitsValid() && b.AllBitsValid())
     {
         return(new Int64Value(a.Value * b.Value));
     }
     if (a.IsZero() || b.IsZero())
     {
         return(Zero);
     }
     if (a.HasValue(1))
     {
         return(b);
     }
     if (b.HasValue(1))
     {
         return(a);
     }
     return(CreateUnknown());
 }
コード例 #6
0
ファイル: Int64Value.cs プロジェクト: formylover/de4dot-1
 public static Int64Value Div(Int64Value a, Int64Value b)
 {
     if (a.AllBitsValid() && b.AllBitsValid())
     {
         try {
             return(new Int64Value(a.Value / b.Value));
         }
         catch (ArithmeticException) {
             return(CreateUnknown());
         }
     }
     if (ReferenceEquals(a, b) && a.IsNonZero())
     {
         return(One);
     }
     if (b.HasValue(1))
     {
         return(a);
     }
     return(CreateUnknown());
 }
コード例 #7
0
		public static Bool3 CompareLe_Un(Int64Value a, Int64Value b) {
			if (a.AllBitsValid() && b.AllBitsValid())
				return (ulong)a.Value <= (ulong)b.Value ? Bool3.True : Bool3.False;
			if (a.HasValue(ulong.MinValue))
				return Bool3.True;	// min <= x => true
			if (b.HasValue(ulong.MaxValue))
				return Bool3.True;	// x <= max => true
			return Bool3.Unknown;
		}
コード例 #8
0
		public static Bool3 CompareLt_Un(Int64Value a, Int64Value b) {
			if (a.AllBitsValid() && b.AllBitsValid())
				return (ulong)a.Value < (ulong)b.Value ? Bool3.True : Bool3.False;
			if (a.HasValue(ulong.MaxValue))
				return Bool3.False;	// max < x => false
			if (b.HasValue(ulong.MinValue))
				return Bool3.False;	// x < min => false
			return Bool3.Unknown;
		}
コード例 #9
0
		public static Bool3 CompareGe(Int64Value a, Int64Value b) {
			if (a.AllBitsValid() && b.AllBitsValid())
				return a.Value >= b.Value ? Bool3.True : Bool3.False;
			if (a.HasValue(long.MaxValue))
				return Bool3.True;	// max >= x => true
			if (b.HasValue(long.MinValue))
				return Bool3.True;	// x >= min => true
			return Bool3.Unknown;
		}
コード例 #10
0
		public static Bool3 CompareGt(Int64Value a, Int64Value b) {
			if (a.AllBitsValid() && b.AllBitsValid())
				return a.Value > b.Value ? Bool3.True : Bool3.False;
			if (a.HasValue(long.MinValue))
				return Bool3.False;	// min > x => false
			if (b.HasValue(long.MaxValue))
				return Bool3.False;	// x > max => false
			return Bool3.Unknown;
		}
コード例 #11
0
		public static Int64Value Rem_Un(Int64Value a, Int64Value b) {
			if (a.AllBitsValid() && b.AllBitsValid()) {
				try {
					return new Int64Value((long)((ulong)a.Value % (ulong)b.Value));
				}
				catch (ArithmeticException) {
					return CreateUnknown();
				}
			}
			if ((ReferenceEquals(a, b) && a.IsNonZero()) || b.HasValue(1))
				return Zero;
			return CreateUnknown();
		}
コード例 #12
0
		public static Int64Value Div(Int64Value a, Int64Value b) {
			if (a.AllBitsValid() && b.AllBitsValid()) {
				try {
					return new Int64Value(a.Value / b.Value);
				}
				catch (ArithmeticException) {
					return CreateUnknown();
				}
			}
			if (ReferenceEquals(a, b) && a.IsNonZero())
				return One;
			if (b.HasValue(1))
				return a;
			return CreateUnknown();
		}
コード例 #13
0
		public static Int64Value Mul(Int64Value a, Int64Value b) {
			if (a.AllBitsValid() && b.AllBitsValid())
				return new Int64Value(a.Value * b.Value);
			if (a.IsZero() || b.IsZero())
				return Zero;
			if (a.HasValue(1))
				return b;
			if (b.HasValue(1))
				return a;
			return CreateUnknown();
		}