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
- MailAddress.cs
- SqlIdentifier.cs
- MonitoringDescriptionAttribute.cs
- GridItemCollection.cs
- HeaderedContentControl.cs
- TypeGeneratedEventArgs.cs
- RadioButtonPopupAdapter.cs
- CannotUnloadAppDomainException.cs
- CustomTrackingRecord.cs
- LayoutUtils.cs
- PropertyTabChangedEvent.cs
- TextRangeEdit.cs
- RegionData.cs
- SmiRequestExecutor.cs
- LayoutEditorPart.cs
- ClientRolePrincipal.cs
- TransformerInfo.cs
- DataServiceRequestArgs.cs
- PathFigureCollectionConverter.cs
- SemanticBasicElement.cs
- SizeConverter.cs
- documentation.cs
- SecurityCriticalDataForSet.cs
- PkcsUtils.cs
- XDeferredAxisSource.cs
- PagesSection.cs
- PersistStreamTypeWrapper.cs
- mediaeventargs.cs
- XmlWrappingReader.cs
- ContentIterators.cs
- AdRotator.cs
- BufferedGraphicsManager.cs
- QilUnary.cs
- ParameterCollectionEditor.cs
- VarInfo.cs
- DataGridDetailsPresenter.cs
- Menu.cs
- VersionValidator.cs
- PerformanceCounterLib.cs
- DataServiceContext.cs
- BitmapVisualManager.cs
- UpdatePanelTriggerCollection.cs
- CustomSignedXml.cs
- InlinedAggregationOperatorEnumerator.cs
- DbConnectionFactory.cs
- TextDpi.cs
- TranslateTransform3D.cs
- CapabilitiesSection.cs
- RadioButton.cs
- unsafenativemethodstextservices.cs
- QilTargetType.cs
- HttpWriter.cs
- DragCompletedEventArgs.cs
- MetafileHeaderWmf.cs
- ProfileProvider.cs
- exports.cs
- BoundPropertyEntry.cs
- DateTimeSerializationSection.cs
- OdbcHandle.cs
- BamlLocalizationDictionary.cs
- TagNameToTypeMapper.cs
- CommonProperties.cs
- AcceptorSessionSymmetricMessageSecurityProtocol.cs
- ToolStripSystemRenderer.cs
- BinaryWriter.cs
- InvokePattern.cs
- WindowsIdentity.cs
- WebCategoryAttribute.cs
- ProviderConnectionPoint.cs
- util.cs
- DataGridViewComboBoxEditingControl.cs
- AnnotationHighlightLayer.cs
- XmlSchemas.cs
- EndpointPerformanceCounters.cs
- RowUpdatedEventArgs.cs
- Imaging.cs
- WindowsListViewSubItem.cs
- PathFigure.cs
- SqlCacheDependencySection.cs
- CombinedGeometry.cs
- DBDataPermission.cs
- unitconverter.cs
- DurableOperationContext.cs
- ActivityExecutionContextCollection.cs
- JsonEnumDataContract.cs
- KeyToListMap.cs
- GeneralTransform3DGroup.cs
- ResourceContainer.cs
- SimpleBitVector32.cs
- WindowsListViewGroupHelper.cs
- XmlResolver.cs
- SessionIDManager.cs
- MissingSatelliteAssemblyException.cs
- X509SecurityToken.cs
- DesignerSerializerAttribute.cs
- DesignTimeData.cs
- PersistenceTypeAttribute.cs
- NetSectionGroup.cs
- ObjectHandle.cs
- DateTimeFormatInfoScanner.cs