Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Base / MS / Internal / BaseHashHelper.cs / 1 / BaseHashHelper.cs
//---------------------------------------------------------------------------- // //// Copyright (C) 2003 by Microsoft Corporation. All rights reserved. // // // // Description: Static class to help work around hashing-related bugs. // //--------------------------------------------------------------------------- using System; using System.Reflection; // Assembly using System.Collections.Specialized; // HybridDictionary using MS.Internal.WindowsBase; // [FriendAccessAllowed] namespace MS.Internal { [FriendAccessAllowed] // defined in Base, used in Core and Framework internal static class BaseHashHelper { static BaseHashHelper() { // register bad types from WindowsBase MS.Internal.Hashing.WindowsBase.HashHelper.Initialize(); } [FriendAccessAllowed] // defined in Base, used in Core and Framework internal static void RegisterTypes(Assembly assembly, Type[] types) { HybridDictionary dictionary = DictionaryFromList(types); lock(_table) { _table[assembly] = dictionary; } } // Some types don't have reliable hash codes - the hashcode can change // during the lifetime of an object of that type. Such an object cannot // be used as the key of a hashtable or dictionary. This is where we // detect such objects, so the caller can find some other way to cope. [FriendAccessAllowed] // defined in Base, used in Core and Framework internal static bool HasReliableHashCode(object item) { // null doesn't actually have a hashcode at all. This method can be // called with a representative item from a collection - if the // representative is null, we'll be pessimistic and assume the // items in the collection should not be hashed. if (item == null) return false; Type type = item.GetType(); Assembly assembly = type.Assembly; HybridDictionary dictionary; lock(_table) { dictionary = (HybridDictionary)_table[assembly]; } if (dictionary == null) { // if we don't have an entry for the object's assembly, // see if we know something about the assembly /* no external types on the `blacklist any more if (type.Namespace == "System.Data" && IsSystemData(assembly)) { dictionary = TypesForSystemData(); } else */ { // if we don't know anything about the assembly, give it an // empty dictionary. This makes future lookups fast. We just // have to hope that every type in the assembly has reliable // hashcodes. dictionary = new HybridDictionary(); } lock(_table) { _table[assembly] = dictionary; } } return !dictionary.Contains(type); } // populate a dictionary from the given list private static HybridDictionary DictionaryFromList(Type[] types) { HybridDictionary dictionary = new HybridDictionary(types.Length); for (int i=0; i// Copyright (C) 2003 by Microsoft Corporation. All rights reserved. // // // // Description: Static class to help work around hashing-related bugs. // //--------------------------------------------------------------------------- using System; using System.Reflection; // Assembly using System.Collections.Specialized; // HybridDictionary using MS.Internal.WindowsBase; // [FriendAccessAllowed] namespace MS.Internal { [FriendAccessAllowed] // defined in Base, used in Core and Framework internal static class BaseHashHelper { static BaseHashHelper() { // register bad types from WindowsBase MS.Internal.Hashing.WindowsBase.HashHelper.Initialize(); } [FriendAccessAllowed] // defined in Base, used in Core and Framework internal static void RegisterTypes(Assembly assembly, Type[] types) { HybridDictionary dictionary = DictionaryFromList(types); lock(_table) { _table[assembly] = dictionary; } } // Some types don't have reliable hash codes - the hashcode can change // during the lifetime of an object of that type. Such an object cannot // be used as the key of a hashtable or dictionary. This is where we // detect such objects, so the caller can find some other way to cope. [FriendAccessAllowed] // defined in Base, used in Core and Framework internal static bool HasReliableHashCode(object item) { // null doesn't actually have a hashcode at all. This method can be // called with a representative item from a collection - if the // representative is null, we'll be pessimistic and assume the // items in the collection should not be hashed. if (item == null) return false; Type type = item.GetType(); Assembly assembly = type.Assembly; HybridDictionary dictionary; lock(_table) { dictionary = (HybridDictionary)_table[assembly]; } if (dictionary == null) { // if we don't have an entry for the object's assembly, // see if we know something about the assembly /* no external types on the `blacklist any more if (type.Namespace == "System.Data" && IsSystemData(assembly)) { dictionary = TypesForSystemData(); } else */ { // if we don't know anything about the assembly, give it an // empty dictionary. This makes future lookups fast. We just // have to hope that every type in the assembly has reliable // hashcodes. dictionary = new HybridDictionary(); } lock(_table) { _table[assembly] = dictionary; } } return !dictionary.Contains(type); } // populate a dictionary from the given list private static HybridDictionary DictionaryFromList(Type[] types) { HybridDictionary dictionary = new HybridDictionary(types.Length); for (int i=0; i
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HuffModule.cs
- XmlSchemaCollection.cs
- RectangleHotSpot.cs
- FreezableCollection.cs
- TextContainerChangeEventArgs.cs
- FontUnitConverter.cs
- StringInfo.cs
- BamlResourceContent.cs
- ColorContext.cs
- Trace.cs
- CardSpaceSelector.cs
- CapabilitiesRule.cs
- Bitmap.cs
- FileVersion.cs
- ContravarianceAdapter.cs
- EventListener.cs
- XLinq.cs
- HttpContext.cs
- ImageMetadata.cs
- DataDesignUtil.cs
- TabPanel.cs
- SqlNotificationEventArgs.cs
- AspNetPartialTrustHelpers.cs
- XPathScanner.cs
- MemoryMappedViewAccessor.cs
- PropertyChangeTracker.cs
- MetabaseServerConfig.cs
- MobileControlPersister.cs
- MruCache.cs
- DesignerAttribute.cs
- ContainerParaClient.cs
- CodeNamespaceImportCollection.cs
- CharEntityEncoderFallback.cs
- DrawingGroup.cs
- odbcmetadatacolumnnames.cs
- HealthMonitoringSection.cs
- ClipboardProcessor.cs
- Exceptions.cs
- Wildcard.cs
- ActivitySurrogateSelector.cs
- _HTTPDateParse.cs
- SelectionItemProviderWrapper.cs
- BrowserCapabilitiesFactory.cs
- MergablePropertyAttribute.cs
- XmlILOptimizerVisitor.cs
- RegexMatchCollection.cs
- ModelService.cs
- DbgCompiler.cs
- TextMarkerSource.cs
- SecurityUtils.cs
- ListBoxItemAutomationPeer.cs
- LocalFileSettingsProvider.cs
- Cursors.cs
- Comparer.cs
- TextTreeTextBlock.cs
- RtType.cs
- Rfc2898DeriveBytes.cs
- CommunicationObjectManager.cs
- GradientStopCollection.cs
- RSACryptoServiceProvider.cs
- AutomationFocusChangedEventArgs.cs
- MatrixConverter.cs
- StylusPointPropertyId.cs
- entitydatasourceentitysetnameconverter.cs
- IncrementalCompileAnalyzer.cs
- CDSCollectionETWBCLProvider.cs
- EntityContainerEmitter.cs
- ReadOnlyDictionary.cs
- FastEncoder.cs
- CompositeCollection.cs
- XmlHelper.cs
- NodeInfo.cs
- PrintDialogDesigner.cs
- WriterOutput.cs
- DiscoveryDocumentLinksPattern.cs
- FontFamilyValueSerializer.cs
- processwaithandle.cs
- RequestValidator.cs
- DrawListViewColumnHeaderEventArgs.cs
- BaseDataBoundControl.cs
- Form.cs
- IPGlobalProperties.cs
- PersonalizationAdministration.cs
- TimerEventSubscription.cs
- HostingMessageProperty.cs
- XamlReader.cs
- COMException.cs
- XmlNamespaceMappingCollection.cs
- XDRSchema.cs
- ServiceDebugElement.cs
- ApplicationServicesHostFactory.cs
- DoubleAnimationBase.cs
- ListManagerBindingsCollection.cs
- HashMembershipCondition.cs
- BackgroundFormatInfo.cs
- GenerateTemporaryTargetAssembly.cs
- ProgressBarAutomationPeer.cs
- SystemDropShadowChrome.cs
- OperationCanceledException.cs
- DeadCharTextComposition.cs