/////////////////////////////////////////////////////////////////////// #region IComparable Members public int CompareTo( object obj ) { IMutableAnyTriplet <T1, T2, T3> other = obj as IMutableAnyTriplet <T1, T2, T3>; if (other == null) { throw new ArgumentException(); } return(CompareTo(other)); }
/////////////////////////////////////////////////////////////////////// #region System.Object Overrides public override bool Equals( object obj ) { IMutableAnyTriplet <T1, T2, T3> triplet = obj as IMutableAnyTriplet <T1, T2, T3>; if (triplet != null) { return(GenericOps <T1> .Equals(this.X, triplet.X) && GenericOps <T2> .Equals(this.Y, triplet.Y) && GenericOps <T3> .Equals(this.Z, triplet.Z)); } else { return(false); } }
public static bool Extract( IMutableAnyTriplet <T1, T2, T3> triplet, ref T4 x, ref T5 y, ref T6 z ) { try { // // HACK: This is not ideal; however, we cannot use the "as" // operator unless we place a restrictions on all the // types (i.e. they must be classes). // T4 x2 = (T4)(object)triplet.X; /* throw */ T5 y2 = (T5)(object)triplet.Y; /* throw */ T6 z2 = (T6)(object)triplet.Z; /* throw */ // // NOTE: Assign to the variables provided by the caller now // that we know the casts were all successful. These // statements cannot throw. // x = x2; y = y2; z = z2; // // NOTE: All of the casts succeeded. // return(true); } catch { // do nothing. } // // NOTE: One of the casts failed. // return(false); }
/////////////////////////////////////////////////////////////////////// #region IComparer<IMutableAnyTriplet<T1,T2,T3>> Members public int Compare( IMutableAnyTriplet <T1, T2, T3> x, IMutableAnyTriplet <T1, T2, T3> y ) { if ((x == null) && (y == null)) { return(0); } else if (x == null) { return(-1); } else if (y == null) { return(1); } else { int result = Comparer <T1> .Default.Compare(x.X, y.X); if (result != 0) { return(result); } result = Comparer <T2> .Default.Compare(x.Y, y.Y); if (result != 0) { return(result); } return(Comparer <T3> .Default.Compare(x.Z, y.Z)); } }
/////////////////////////////////////////////////////////////////////// #region IEquatable<IMutableAnyTriplet<T1,T2,T3>> Members public bool Equals( IMutableAnyTriplet <T1, T2, T3> other ) { return(CompareTo(other) == 0); }
/////////////////////////////////////////////////////////////////////// #region IComparable<IMutableAnyTriplet<T1,T2,T3>> Members public int CompareTo( IMutableAnyTriplet <T1, T2, T3> other ) { return(Compare(this, other)); }