1 module antlr.v4.runtime.atn.ContextMapObjectEqualityComparator;
2 
3 import antlr.v4.runtime.atn.ATNConfig;
4 import antlr.v4.runtime.misc.MurmurHash;
5 
6 // Singleton ContextMapObjectEqualityComparator
7 /**
8  * TODO add class description
9  */
10 class ContextMapObjectEqualityComparator
11 {
12 
13     /**
14      * The single instance of ContextMapObjectEqualityComparator.
15      */
16     private static __gshared ContextMapObjectEqualityComparator instance_;
17 
18     public static bool opEquals(Object a, Object b)
19     {
20         if (a is b) {
21             return true;
22         } else
23             if (b is null || a is null) {
24                 return false;
25             }
26         auto objA = cast(ATNConfig)a;
27         auto objB = cast(ATNConfig)b;
28         return objA.state.stateNumber == objA.state.stateNumber
29             && (objA.context is objB.context ||
30                 (objA.context !is null && objB.context !is null &&
31                  objA.context.opEquals(objB.context)));
32     }
33 
34     /**
35      * @uml
36      * @trusted
37      * @nothrow
38      */
39     public static size_t toHash(Object o) @trusted nothrow
40     {
41         if (cast(ATNConfig)o)
42             {
43                 auto obj = cast(ATNConfig)o;
44                 size_t hashCode = MurmurHash.initialize(7);
45                 hashCode = MurmurHash.update(hashCode, obj.state.stateNumber);
46                 hashCode = MurmurHash.update(hashCode, obj.context);
47                 hashCode = MurmurHash.finish(hashCode, 2);
48                 return hashCode;
49             }
50         return false;
51     }
52 
53     /**
54      * Creates the single instance of ContextMapObjectEqualityComparator.
55      */
56     private shared static this()
57     {
58         instance_ = new ContextMapObjectEqualityComparator;
59     }
60 
61     /**
62      * Returns: A single instance of ContextMapObjectEqualityComparator.
63      */
64     public static ContextMapObjectEqualityComparator instance()
65     {
66         return instance_;
67     }
68 
69 }