Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / MS / Internal / BaseHashHelper.cs / 1305600 / 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) { 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) { 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
- XmlSortKey.cs
- AccessDataSourceView.cs
- UnconditionalPolicy.cs
- FontWeight.cs
- RangeValuePatternIdentifiers.cs
- EncryptedXml.cs
- LinkedList.cs
- HttpValueCollection.cs
- RegionInfo.cs
- SvcMapFileLoader.cs
- SiteMapDataSource.cs
- MetadataCache.cs
- XmlUtilWriter.cs
- CurrencyWrapper.cs
- FixedElement.cs
- grammarelement.cs
- ExtensionDataReader.cs
- CompressionTransform.cs
- EffectiveValueEntry.cs
- BuildResult.cs
- XmlUTF8TextReader.cs
- ServicePrincipalNameElement.cs
- userdatakeys.cs
- RemoteWebConfigurationHost.cs
- MetadataItem.cs
- XmlParserContext.cs
- sqlstateclientmanager.cs
- SafeProcessHandle.cs
- WebConfigurationHostFileChange.cs
- Int16Converter.cs
- SimpleBitVector32.cs
- ReaderWriterLockWrapper.cs
- CrossAppDomainChannel.cs
- Matrix.cs
- ContextMarshalException.cs
- DataSourceView.cs
- UIAgentInitializationException.cs
- ConfigurationManagerInternalFactory.cs
- Grid.cs
- SRGSCompiler.cs
- DataGridViewSelectedRowCollection.cs
- HttpMethodConstraint.cs
- OledbConnectionStringbuilder.cs
- HostedController.cs
- ProtocolElement.cs
- VBIdentifierNameEditor.cs
- DesignerOptions.cs
- TypeContext.cs
- IncrementalReadDecoders.cs
- EntityCollection.cs
- EnumBuilder.cs
- DrawingGroup.cs
- ExpressionParser.cs
- ClientType.cs
- CryptoConfig.cs
- WebReferenceCollection.cs
- StandardOleMarshalObject.cs
- ScopelessEnumAttribute.cs
- DrawingContextWalker.cs
- XmlSchemaAnnotation.cs
- ErrorProvider.cs
- DES.cs
- MaskedTextProvider.cs
- LinkedResourceCollection.cs
- Filter.cs
- FixedSOMLineRanges.cs
- sitestring.cs
- XmlSchemaProviderAttribute.cs
- DataTemplateKey.cs
- Stream.cs
- Underline.cs
- EndpointDiscoveryMetadata.cs
- TextBox.cs
- TdsParserSafeHandles.cs
- UnrecognizedPolicyAssertionElement.cs
- UnsafeNativeMethods.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- CalculatedColumn.cs
- Point3DKeyFrameCollection.cs
- DecimalAnimationUsingKeyFrames.cs
- TableLayoutPanelCellPosition.cs
- ModifierKeysConverter.cs
- ValidationErrorCollection.cs
- RuntimeHelpers.cs
- UriPrefixTable.cs
- BrowsableAttribute.cs
- Compilation.cs
- IList.cs
- ResourceType.cs
- SafeSecurityHandles.cs
- UpdateCompiler.cs
- SQLMembershipProvider.cs
- QilInvoke.cs
- GridViewColumn.cs
- ProviderSettingsCollection.cs
- InitializerFacet.cs
- SrgsRuleRef.cs
- FontUnitConverter.cs
- CollectionChangedEventManager.cs
- XmlSchemaObject.cs