Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Base / MS / Internal / BaseHashHelper.cs / 2 / 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 block list 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 block list 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
- X509Utils.cs
- ObjectViewEntityCollectionData.cs
- OutputCacheProfileCollection.cs
- NavigationHelper.cs
- TreeNodeStyleCollection.cs
- InvalidEnumArgumentException.cs
- PaintValueEventArgs.cs
- CngProperty.cs
- InvalidDataException.cs
- StringAnimationUsingKeyFrames.cs
- ErrorHandlerFaultInfo.cs
- TraceRecord.cs
- WorkBatch.cs
- XmlILIndex.cs
- unsafeIndexingFilterStream.cs
- GroupBox.cs
- DetailsViewPageEventArgs.cs
- UTF32Encoding.cs
- UriTemplateEquivalenceComparer.cs
- X509ChainPolicy.cs
- ToolStripDropDown.cs
- SiteMapNode.cs
- OperandQuery.cs
- EventBuilder.cs
- SolidColorBrush.cs
- ToolStripSplitButton.cs
- TagMapInfo.cs
- LinqToSqlWrapper.cs
- MissingMemberException.cs
- HelpProvider.cs
- UIElement3D.cs
- IssuanceLicense.cs
- HotCommands.cs
- WpfKnownType.cs
- RemoteWebConfigurationHost.cs
- ACE.cs
- DeflateStream.cs
- Application.cs
- XmlSchemaSimpleTypeRestriction.cs
- DataTableExtensions.cs
- CmsInterop.cs
- ObfuscationAttribute.cs
- SurrogateSelector.cs
- EventHandlerList.cs
- ImageSource.cs
- SiteMembershipCondition.cs
- XmlIncludeAttribute.cs
- UnsafePeerToPeerMethods.cs
- _StreamFramer.cs
- LineServicesCallbacks.cs
- DnsPermission.cs
- PropertyValueChangedEvent.cs
- InputScopeNameConverter.cs
- Privilege.cs
- CodeGeneratorOptions.cs
- Rect.cs
- LinearGradientBrush.cs
- HostVisual.cs
- SecurityKeyType.cs
- DefaultTextStoreTextComposition.cs
- XamlTypeMapper.cs
- XmlArrayItemAttributes.cs
- FileSecurity.cs
- Win32Native.cs
- SigningCredentials.cs
- FrameworkContextData.cs
- Model3DCollection.cs
- XmlSecureResolver.cs
- DataGridBeginningEditEventArgs.cs
- RightsManagementInformation.cs
- EventPropertyMap.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- _PooledStream.cs
- documentsequencetextpointer.cs
- Geometry3D.cs
- odbcmetadatacolumnnames.cs
- SchemaElementDecl.cs
- HealthMonitoringSectionHelper.cs
- ConfigurationElementCollection.cs
- ColumnWidthChangedEvent.cs
- TraceSection.cs
- DefaultMemberAttribute.cs
- HopperCache.cs
- FixedSOMPage.cs
- XmlKeywords.cs
- IApplicationTrustManager.cs
- IODescriptionAttribute.cs
- webeventbuffer.cs
- DataGridViewLinkCell.cs
- HttpServerVarsCollection.cs
- FileResponseElement.cs
- ExtensibleClassFactory.cs
- EnumUnknown.cs
- PageParserFilter.cs
- SqlRowUpdatingEvent.cs
- HtmlInputCheckBox.cs
- ToolboxItem.cs
- TextTreeTextElementNode.cs
- PrinterUnitConvert.cs
- PropertyGridEditorPart.cs