Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- sqlstateclientmanager.cs
- DbConnectionHelper.cs
- TextBoxLine.cs
- HashMembershipCondition.cs
- HtmlElement.cs
- ContainerVisual.cs
- SizeAnimationBase.cs
- securestring.cs
- PersonalizableTypeEntry.cs
- ApplyHostConfigurationBehavior.cs
- ViewPort3D.cs
- StringConverter.cs
- Control.cs
- BinaryQueryOperator.cs
- CodeAccessSecurityEngine.cs
- JobStaple.cs
- PropertyTabChangedEvent.cs
- FrameworkContextData.cs
- ExpressionBuilder.cs
- ToolStripDropDownItem.cs
- XmlSchemaExporter.cs
- SystemIPInterfaceStatistics.cs
- StyleSheetComponentEditor.cs
- EncodingDataItem.cs
- XmlDictionaryReader.cs
- XmlSerializerFactory.cs
- SwitchAttribute.cs
- ComplexPropertyEntry.cs
- ScrollItemPatternIdentifiers.cs
- TextTreeTextNode.cs
- WmpBitmapDecoder.cs
- DesignUtil.cs
- ImageBrush.cs
- CaretElement.cs
- FileIOPermission.cs
- ProxySimple.cs
- SecurityMessageProperty.cs
- ValuePattern.cs
- SchemaImporter.cs
- WebServiceParameterData.cs
- CoTaskMemHandle.cs
- DnsPermission.cs
- TextRangeSerialization.cs
- DocumentManager.cs
- SecurityRuntime.cs
- CompensableActivity.cs
- VirtualPath.cs
- EntityDataSourceWizardForm.cs
- HtmlObjectListAdapter.cs
- RemotingService.cs
- VScrollBar.cs
- CompiledELinqQueryState.cs
- BindingManagerDataErrorEventArgs.cs
- GeometryConverter.cs
- DiscoveryClientElement.cs
- DynamicRenderer.cs
- _emptywebproxy.cs
- GenericWebPart.cs
- OrthographicCamera.cs
- SchemaMapping.cs
- CharConverter.cs
- ServiceDebugBehavior.cs
- HtmlLink.cs
- SizeIndependentAnimationStorage.cs
- ObfuscationAttribute.cs
- EventTask.cs
- BasicBrowserDialog.designer.cs
- PrintPreviewControl.cs
- DataServiceQueryOfT.cs
- ResXDataNode.cs
- RoutedUICommand.cs
- COAUTHINFO.cs
- StoreAnnotationsMap.cs
- Stream.cs
- SchemaImporterExtensionElementCollection.cs
- DocumentViewer.cs
- HostDesigntimeLicenseContext.cs
- DesignBindingValueUIHandler.cs
- VirtualPathProvider.cs
- ConcurrencyMode.cs
- PkcsMisc.cs
- BufferedWebEventProvider.cs
- HttpModule.cs
- WindowVisualStateTracker.cs
- RequestCacheValidator.cs
- IssuedTokenClientCredential.cs
- HttpWebRequestElement.cs
- SqlComparer.cs
- TargetPerspective.cs
- ProgressPage.cs
- DockProviderWrapper.cs
- ImageField.cs
- AnonymousIdentificationSection.cs
- EventDriven.cs
- OutputCacheSection.cs
- MetadataItemEmitter.cs
- DbConnectionInternal.cs
- WeakEventTable.cs
- CurrencyWrapper.cs
- CachingHintValidation.cs