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

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Metadata.cs
- DLinqColumnProvider.cs
- CompilerParameters.cs
- ScrollEvent.cs
- DataTableClearEvent.cs
- ApplicationDirectoryMembershipCondition.cs
- sqlstateclientmanager.cs
- HashHelper.cs
- EffectiveValueEntry.cs
- codemethodreferenceexpression.cs
- PlatformNotSupportedException.cs
- FormViewInsertEventArgs.cs
- Renderer.cs
- AdornerDecorator.cs
- PageScaling.cs
- FilterUserControlBase.cs
- AddInControllerImpl.cs
- DocumentGrid.cs
- UIElement3D.cs
- LinkTarget.cs
- WebPartChrome.cs
- ScalarType.cs
- GeneralTransform3D.cs
- HtmlInputRadioButton.cs
- SponsorHelper.cs
- AlphabeticalEnumConverter.cs
- DataGridColumnHeader.cs
- CallContext.cs
- AuthorizationRuleCollection.cs
- CompiledQueryCacheKey.cs
- DependencyPropertyAttribute.cs
- SessionEndingCancelEventArgs.cs
- OdbcConnectionFactory.cs
- TdsEnums.cs
- PathSegment.cs
- InfoCardClaim.cs
- DynamicRendererThreadManager.cs
- CacheEntry.cs
- SafeMILHandle.cs
- HotSpot.cs
- BitmapSource.cs
- XmlElementAttributes.cs
- SourceFilter.cs
- WebResourceAttribute.cs
- FieldNameLookup.cs
- basecomparevalidator.cs
- StylusEditingBehavior.cs
- DoubleLink.cs
- ArcSegment.cs
- TimersDescriptionAttribute.cs
- httpapplicationstate.cs
- ConstructorNeedsTagAttribute.cs
- FixedPage.cs
- BaseResourcesBuildProvider.cs
- FormViewCommandEventArgs.cs
- SnapLine.cs
- OracleInfoMessageEventArgs.cs
- OdbcTransaction.cs
- AppModelKnownContentFactory.cs
- DesignerActionUI.cs
- DataPager.cs
- IdnMapping.cs
- XmlQueryStaticData.cs
- UnsafeNativeMethods.cs
- EventLogEntryCollection.cs
- MarkupExtensionParser.cs
- PrintingPermissionAttribute.cs
- panel.cs
- XmlEventCache.cs
- LinkTarget.cs
- ApplicationFileParser.cs
- SmiEventSink.cs
- InterleavedZipPartStream.cs
- ProcessHostConfigUtils.cs
- Comparer.cs
- WindowsImpersonationContext.cs
- CurrentTimeZone.cs
- ConfigXmlWhitespace.cs
- FlowDocumentScrollViewer.cs
- GAC.cs
- ManagementScope.cs
- BoundField.cs
- PeerNameRegistration.cs
- ProcessModelInfo.cs
- AsyncPostBackTrigger.cs
- BindingExpression.cs
- BigInt.cs
- GcSettings.cs
- SafeLibraryHandle.cs
- StringToken.cs
- BaseProcessProtocolHandler.cs
- SQLInt64.cs
- CompilerCollection.cs
- TemplateField.cs
- DataServiceConfiguration.cs
- SQLGuid.cs
- CacheHelper.cs
- UIElement3DAutomationPeer.cs
- QueryableDataSource.cs
- PackageProperties.cs