/* * This file is part of the X10 project (http://x10-lang.org). * * This file is licensed to You under the Eclipse Public License (EPL); * You may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.opensource.org/licenses/eclipse-1.0.php * * (C) Copyright IBM Corporation 2006-2010. */ package x10.rtt; public class Equality { public static boolean equalsequals(boolean a, boolean b) { return a == b; } public static boolean equalsequals(boolean a, Object b) { return equalsequals(x10.core.Boolean.$box(a), b); } public static int compareTo(boolean a, boolean b) { return a == b ? 0 : (b ? -1 : 1); } public static int compareTo(boolean a, Comparable b) { return compareTo(x10.core.Boolean.$box(a), b); } public static boolean equalsequals(char a, char b) { return a == b; } public static boolean equalsequals(char a, Object b) { return equalsequals(x10.core.Char.$box(a), b); } public static int compareTo(char a, char b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(char a, Comparable b) { return compareTo(x10.core.Char.$box(a), b); } public static boolean equalsequals(byte a, byte b) { return a == b; } public static boolean equalsequals(byte a, Object b) { return equalsequals(x10.core.Byte.$box(a), b); } public static int compareTo(byte a, byte b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(byte a, short b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(byte a, int b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(byte a, long b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(byte a, float b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(byte a, double b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(byte a, Comparable b) { return compareTo(x10.core.Byte.$box(a), b); } public static boolean equalsequals(short a, short b) { return a == b; } public static boolean equalsequals(short a, Object b) { return equalsequals(x10.core.Short.$box(a), b); } public static int compareTo(short a, byte b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(short a, short b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(short a, int b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(short a, long b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(short a, float b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(short a, double b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(short a, Comparable b) { return compareTo(x10.core.Short.$box(a), b); } public static boolean equalsequals(int a, int b) { return a == b; } public static boolean equalsequals(int a, Object b) { return equalsequals(x10.core.Int.$box(a), b); } public static int compareTo(int a, byte b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(int a, short b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(int a, int b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(int a, long b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(int a, float b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(int a, double b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(int a, Comparable b) { return compareTo(x10.core.Int.$box(a), b); } public static boolean equalsequals(long a, long b) { return a == b; } public static boolean equalsequals(long a, Object b) { return equalsequals(x10.core.Long.$box(a), b); } public static int compareTo(long a, byte b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(long a, short b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(long a, int b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(long a, long b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(long a, float b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(long a, double b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(long a, Comparable b) { return compareTo(x10.core.Long.$box(a), b); } public static boolean equalsequals(float a, float b) { return a == b; } public static boolean equalsequals(float a, Object b) { return equalsequals(x10.core.Float.$box(a), b); } public static int compareTo(float a, byte b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(float a, short b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(float a, int b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(float a, long b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(float a, float b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(float a, double b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(float a, Comparable b) { return compareTo(x10.core.Float.$box(a), b); } public static boolean equalsequals(double a, double b) { return a == b; } public static boolean equalsequals(double a, Object b) { return equalsequals(x10.core.Double.$box(a), b); } public static int compareTo(double a, byte b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(double a, short b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(double a, int b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(double a, long b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(double a, float b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(double a, double b) { return a == b ? 0 : (a < b ? -1 : 1); } public static int compareTo(double a, Comparable b) { return compareTo(x10.core.Double.$box(a), b); } public static boolean equalsequals(Object a, boolean b) { return equalsequals(a, x10.core.Boolean.$box(b)); } public static boolean equalsequals(Object a, byte b) { return equalsequals(a, x10.core.Byte.$box(b)); } public static boolean equalsequals(Object a, short b) { return equalsequals(a, x10.core.Short.$box(b)); } public static boolean equalsequals(Object a, char b) { return equalsequals(a, x10.core.Char.$box(b)); } public static boolean equalsequals(Object a, int b) { return equalsequals(a, x10.core.Int.$box(b)); } public static boolean equalsequals(Object a, long b) { return equalsequals(a, x10.core.Long.$box(b)); } public static boolean equalsequals(Object a, float b) { return equalsequals(a, x10.core.Float.$box(b)); } public static boolean equalsequals(Object a, double b) { return equalsequals(a, x10.core.Double.$box(b)); } public static int compareTo(Comparable a, boolean b) { return compareTo(a, x10.core.Boolean.$box(b)); } public static int compareTo(Comparable a, byte b) { return compareTo(a, x10.core.Byte.$box(b)); } public static int compareTo(Comparable a, short b) { return compareTo(a, x10.core.Short.$box(b)); } public static int compareTo(Comparable a, char b) { return compareTo(a, x10.core.Char.$box(b)); } public static int compareTo(Comparable a, int b) { return compareTo(a, x10.core.Int.$box(b)); } public static int compareTo(Comparable a, long b) { return compareTo(a, x10.core.Long.$box(b)); } public static int compareTo(Comparable a, float b) { return compareTo(a, x10.core.Float.$box(b)); } public static int compareTo(Comparable a, double b) { return compareTo(a, x10.core.Double.$box(b)); } public static boolean equalsequals(Object a, Object b) { // Ref equality is pointer equality. // This also handles "null == null" and serves as a short cut for other types. if (a == b) return true; // Struct equality is value equality that implys non-null. if (a == null || b == null) return false; // N.B. this is shortcut that can be removed safely // if we need to know the referenceness of values at runtime in some other context, // we may want to introduce isref() in RTT, which comes from Type.isReference(), and use it. // if (a instanceof x10.core.RefI || b instanceof x10.core.RefI) return false; // equality of structs are follows // short cuts for primitives if (a instanceof x10.core.Boolean && b instanceof x10.core.Boolean) return x10.core.Boolean.$unbox((x10.core.Boolean) a) == x10.core.Boolean.$unbox((x10.core.Boolean) b); if (a instanceof x10.core.Char && b instanceof x10.core.Char) return x10.core.Char.$unbox((x10.core.Char) a) == x10.core.Char.$unbox((x10.core.Char) b); if (a instanceof Number && b instanceof Number) return equalsNumbers((Number) a, (Number) b); // for general structs. it also works with primitives. if (a instanceof x10.core.StructI) return ((x10.core.StructI) a)._struct_equals$O(b); return false; } public static int compareTo(Comparable a, Comparable b) { return a.compareTo(b); } private static boolean equalsNumbers(Number a, Number b) { if (a instanceof x10.core.Double && b instanceof x10.core.Double) { return x10.core.Double.$unbox((x10.core.Double)a) == x10.core.Double.$unbox((x10.core.Double)b); } if (a instanceof x10.core.Float && b instanceof x10.core.Float) { return x10.core.Float.$unbox((x10.core.Float)a) == x10.core.Float.$unbox((x10.core.Float)b); } if (a instanceof x10.core.Long && b instanceof x10.core.Long) { return x10.core.Long.$unbox((x10.core.Long)a) == x10.core.Long.$unbox((x10.core.Long)b); } if (a instanceof x10.core.Int && b instanceof x10.core.Int) { return x10.core.Int.$unbox((x10.core.Int)a) == x10.core.Int.$unbox((x10.core.Int)b); } if (a instanceof x10.core.Short && b instanceof x10.core.Short) { return x10.core.Short.$unbox((x10.core.Short)a) == x10.core.Short.$unbox((x10.core.Short)b); } if (a instanceof x10.core.Byte && b instanceof x10.core.Byte) { return x10.core.Byte.$unbox((x10.core.Byte)a) == x10.core.Byte.$unbox((x10.core.Byte)b); } if (a instanceof x10.core.ULong && b instanceof x10.core.ULong) { return x10.core.ULong.$unbox((x10.core.ULong)a) == x10.core.ULong.$unbox((x10.core.ULong)b); } if (a instanceof x10.core.UInt && b instanceof x10.core.UInt) { return x10.core.UInt.$unbox((x10.core.UInt)a) == x10.core.UInt.$unbox((x10.core.UInt)b); } if (a instanceof x10.core.UShort && b instanceof x10.core.UShort) { return x10.core.UShort.$unbox((x10.core.UShort)a) == x10.core.UShort.$unbox((x10.core.UShort)b); } if (a instanceof x10.core.UByte && b instanceof x10.core.UByte) { return x10.core.UByte.$unbox((x10.core.UByte)a) == x10.core.UByte.$unbox((x10.core.UByte)b); } return false; } }