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
- DocumentSchemaValidator.cs
- ToolStripHighContrastRenderer.cs
- RenderOptions.cs
- ColorContext.cs
- GregorianCalendar.cs
- ViewPort3D.cs
- XmlSchemaAttributeGroup.cs
- WindowsProgressbar.cs
- View.cs
- IntSecurity.cs
- BindingGraph.cs
- CharacterBufferReference.cs
- SwitchAttribute.cs
- ArrayTypeMismatchException.cs
- FixedSOMPageConstructor.cs
- MetadataUtil.cs
- XmlEntity.cs
- Knowncolors.cs
- ContainerActivationHelper.cs
- RegistrySecurity.cs
- RuleProcessor.cs
- Viewport3DAutomationPeer.cs
- ReliableDuplexSessionChannel.cs
- RelatedCurrencyManager.cs
- OperationCanceledException.cs
- ArgumentOutOfRangeException.cs
- WorkflowServiceAttributesTypeConverter.cs
- ForeignConstraint.cs
- InputScopeManager.cs
- Table.cs
- ScrollEvent.cs
- safelink.cs
- QilLiteral.cs
- NamedServiceModelExtensionCollectionElement.cs
- SiteMapNodeItemEventArgs.cs
- PeerToPeerException.cs
- TableProvider.cs
- PageParser.cs
- InfoCardBinaryReader.cs
- MdiWindowListItemConverter.cs
- StatusBarDrawItemEvent.cs
- XDRSchema.cs
- CodeComment.cs
- DocumentXmlWriter.cs
- DropDownButton.cs
- CurrentTimeZone.cs
- XDRSchema.cs
- ConfigurationProperty.cs
- ResourcePermissionBaseEntry.cs
- QfeChecker.cs
- IsolatedStorageFile.cs
- EmptyEnumerable.cs
- XPathConvert.cs
- FillRuleValidation.cs
- XmlDataLoader.cs
- ToolStripEditorManager.cs
- XmlDataImplementation.cs
- TraceUtils.cs
- PerformanceCounterPermissionEntryCollection.cs
- ThemeInfoAttribute.cs
- LineServicesCallbacks.cs
- TableLayoutPanel.cs
- HtmlShim.cs
- SessionSwitchEventArgs.cs
- DataGridViewDataConnection.cs
- ConsumerConnectionPoint.cs
- HostUtils.cs
- Internal.cs
- IOThreadScheduler.cs
- Splitter.cs
- HtmlButton.cs
- PixelFormats.cs
- BooleanAnimationUsingKeyFrames.cs
- FixUpCollection.cs
- Hashtable.cs
- HttpHandlersSection.cs
- ComponentTray.cs
- InvalidEnumArgumentException.cs
- SapiRecoContext.cs
- XpsFixedDocumentReaderWriter.cs
- DesignConnection.cs
- Stack.cs
- ToolStripHighContrastRenderer.cs
- TraceListeners.cs
- WebPartsPersonalizationAuthorization.cs
- CompositeCollectionView.cs
- DocumentsTrace.cs
- NumberEdit.cs
- SubMenuStyleCollection.cs
- DataSourceControlBuilder.cs
- ToolStripPanelRow.cs
- EntryPointNotFoundException.cs
- FieldTemplateFactory.cs
- ExplicitDiscriminatorMap.cs
- DrawListViewColumnHeaderEventArgs.cs
- base64Transforms.cs
- ColorConvertedBitmapExtension.cs
- CodeTypeParameter.cs
- Permission.cs
- ProfileEventArgs.cs