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