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
- XmlEnumAttribute.cs
- CountAggregationOperator.cs
- TargetConverter.cs
- DataGridCellClipboardEventArgs.cs
- StylusPointProperty.cs
- ValidatorCompatibilityHelper.cs
- FilterException.cs
- PackageRelationshipSelector.cs
- _ContextAwareResult.cs
- ApplicationContext.cs
- printdlgexmarshaler.cs
- CacheOutputQuery.cs
- ServiceCredentialsElement.cs
- SqlBulkCopyColumnMappingCollection.cs
- LinkLabel.cs
- ComponentCommands.cs
- MenuItemBindingCollection.cs
- TableColumnCollection.cs
- Blend.cs
- AppDomainCompilerProxy.cs
- BuilderInfo.cs
- MonitorWrapper.cs
- MetricEntry.cs
- HotSpot.cs
- Stack.cs
- CookielessHelper.cs
- XPathException.cs
- DocumentGridPage.cs
- DSACryptoServiceProvider.cs
- HandlerMappingMemo.cs
- TargetPerspective.cs
- NavigationPropertyEmitter.cs
- BypassElementCollection.cs
- TimeoutTimer.cs
- Menu.cs
- _SslState.cs
- WebBrowserProgressChangedEventHandler.cs
- IIS7UserPrincipal.cs
- GenericEnumerator.cs
- TextTreeTextElementNode.cs
- DBParameter.cs
- CultureSpecificStringDictionary.cs
- BasicExpressionVisitor.cs
- NotifyCollectionChangedEventArgs.cs
- TextContainerChangeEventArgs.cs
- PartialCachingControl.cs
- Facet.cs
- PropertyTab.cs
- ContentElementAutomationPeer.cs
- CryptoKeySecurity.cs
- EdmItemCollection.cs
- Clock.cs
- Monitor.cs
- HostSecurityManager.cs
- CompensateDesigner.cs
- ImageCodecInfo.cs
- EdmFunctionAttribute.cs
- ListViewItem.cs
- ShapeTypeface.cs
- StaticResourceExtension.cs
- ServiceReflector.cs
- RenamedEventArgs.cs
- ItemsControl.cs
- HuffModule.cs
- ConfigPathUtility.cs
- ProcessProtocolHandler.cs
- HitTestParameters3D.cs
- SafeViewOfFileHandle.cs
- ImageAttributes.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- BamlReader.cs
- SmtpNtlmAuthenticationModule.cs
- MD5CryptoServiceProvider.cs
- updatecommandorderer.cs
- MenuAutoFormat.cs
- ObjectParameterCollection.cs
- DesignTimeData.cs
- ScriptRegistrationManager.cs
- HttpCacheVary.cs
- CompiledQuery.cs
- AvtEvent.cs
- ServiceInfo.cs
- OrderingInfo.cs
- SqlDataReaderSmi.cs
- HMACSHA256.cs
- OleDbConnectionFactory.cs
- infer.cs
- WSHttpSecurityElement.cs
- InstanceLockLostException.cs
- XmlSchemaImport.cs
- EmptyStringExpandableObjectConverter.cs
- DropShadowEffect.cs
- FormViewUpdateEventArgs.cs
- ProfessionalColorTable.cs
- CursorInteropHelper.cs
- RtfToXamlLexer.cs
- DockAndAnchorLayout.cs
- TypePresenter.xaml.cs
- SchemaImporter.cs
- Char.cs