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 }