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 }