public override V GetExtension(ConversionKey key) { Object extension = this.classEntry.Get(key); if (extension == null) { Object writeLock = GetWriteLock(); lock (writeLock) { extension = this.classEntry.Get(key); if (extension == null) { ClassTupleEntry <V> classEntry = CopyStructure(); classEntry.Put(key, alreadyHandled); classEntry.typeToDefEntryMap.Put(key, alreadyHandled); CheckToWeakRegisterExistingExtensions(key, classEntry); this.classEntry = classEntry; extension = classEntry.Get(key); if (extension == null) { return(default(V)); } } } } if (Object.ReferenceEquals(extension, alreadyHandled)) { // Already tried return(default(V)); } return((V)extension); }
protected void TypeToDefEntryMapChanged(ClassTupleEntry <V> classEntry, ConversionKey key) { Object obj = classEntry.typeToDefEntryMap.Get(key); if (obj == null) { classEntry.Remove(key); return; } if (obj == alreadyHandled) { classEntry.Put(key, alreadyHandled); return; } if (obj is Def2Entry <V> ) { classEntry.Put(key, ((Def2Entry <V>)obj).extension); return; } Def2Entry <V> firstDefEntry = ((InterfaceFastList <Def2Entry <V> >)obj).First.ElemValue; classEntry.Put(key, firstDefEntry.extension); }