public override void Unregister(V extension, ConversionKey key) { ParamChecker.AssertParamNotNull(extension, "extension"); ParamChecker.AssertParamNotNull(key, "key"); Object writeLock = GetWriteLock(); lock (writeLock) { base.Unregister(extension, key); ClassTupleEntry <V> classEntry = CopyStructure(); HashMap <Strong2Key <V>, List <Def2Entry <V> > > definitionReverseMap = classEntry.definitionReverseMap; List <Def2Entry <V> > weakEntriesOfStrongType = definitionReverseMap.Remove(new Strong2Key <V>(extension, key)); if (weakEntriesOfStrongType == null) { return; } HashMap <ConversionKey, Object> typeToDefEntryMap = classEntry.typeToDefEntryMap; for (int a = weakEntriesOfStrongType.Count; a-- > 0;) { Def2Entry <V> defEntry = weakEntriesOfStrongType[a]; ConversionKey registeredKey = new ConversionKey(defEntry.sourceType, defEntry.targetType); Object value = typeToDefEntryMap.Get(registeredKey); InterfaceFastList <Def2Entry <V> > list = (InterfaceFastList <Def2Entry <V> >)value; list.Remove(defEntry); if (list.Count == 0) { typeToDefEntryMap.Remove(registeredKey); } TypeToDefEntryMapChanged(classEntry, registeredKey); } this.classEntry = classEntry; } }
public override void Register(V extension, ConversionKey key) { ParamChecker.AssertParamNotNull(extension, "extension"); ParamChecker.AssertParamNotNull(key, "key"); Object writeLock = GetWriteLock(); lock (writeLock) { base.Register(extension, key); ClassTupleEntry <V> classEntry = CopyStructure(); AppendRegistration(key, key, extension, 0, 0, classEntry); CheckToWeakRegisterExistingTypes(key, extension, classEntry); CheckToWeakRegisterExistingExtensions(key, classEntry); this.classEntry = classEntry; } }
public void Unregister(V extension, Type sourceType, Type targetType) { ParamChecker.AssertParamNotNull(sourceType, "sourceType"); ParamChecker.AssertParamNotNull(targetType, "targetType"); Unregister(extension, new ConversionKey(sourceType, targetType)); }