1 module antlr.v4.runtime.misc.ObjectEqualityComparator; 2 3 import antlr.v4.runtime.misc.AbstractEqualityComparator; 4 5 // Singleton ObjectEqualityComparator 6 /** 7 * This default implementation of {@link EqualityComparator} uses object equality 8 * for comparisons by calling {@link Object#hashCode} and {@link Object#equals}. 9 * 10 * @author Sam Harwell 11 */ 12 class ObjectEqualityComparator : AbstractEqualityComparator!Object 13 { 14 15 /** 16 * The single instance of ObjectEqualityComparator. 17 */ 18 private static __gshared ObjectEqualityComparator instance_; 19 20 /** 21 * <p>This implementation returns 22 * {@code obj.}{@link Object#hashCode hashCode()}.</p> 23 * @uml 24 * @safe 25 * @nothrow 26 */ 27 public static size_t hashOf(Object obj) @safe nothrow 28 { 29 if (obj is null) { 30 return 0; 31 } 32 return obj.toHash >> 3; 33 } 34 35 public static bool opEquals(Object a, Object b) 36 { 37 if (a is null) { 38 return b is null; 39 } 40 return a is b; 41 } 42 43 /** 44 * Creates the single instance of ObjectEqualityComparator. 45 */ 46 private shared static this() 47 { 48 instance_ = new ObjectEqualityComparator; 49 } 50 51 /** 52 * Returns: A single instance of ObjectEqualityComparator. 53 */ 54 public static ObjectEqualityComparator instance() 55 { 56 return instance_; 57 } 58 59 }