Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / MS / Internal / BaseHashHelper.cs / 1305600 / 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) { 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) { 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
- UIntPtr.cs
- Not.cs
- OperationInfo.cs
- SignedXml.cs
- WebSysDefaultValueAttribute.cs
- AnimationStorage.cs
- FeatureManager.cs
- MLangCodePageEncoding.cs
- TrustSection.cs
- SafeMarshalContext.cs
- TableParaClient.cs
- CanExecuteRoutedEventArgs.cs
- SafeHandle.cs
- InsufficientMemoryException.cs
- StrokeSerializer.cs
- Number.cs
- AttributeQuery.cs
- WorkflowInstanceRecord.cs
- DiscoveryInnerClientAdhocCD1.cs
- SqlDataAdapter.cs
- BooleanAnimationUsingKeyFrames.cs
- EntitySetBase.cs
- LabelDesigner.cs
- InputBindingCollection.cs
- PropertyGridView.cs
- ToolStripItemEventArgs.cs
- TypeUtil.cs
- Regex.cs
- Transaction.cs
- HtmlAnchor.cs
- ObjectDataSourceSelectingEventArgs.cs
- RegexMatch.cs
- PathGeometry.cs
- RelationshipEndMember.cs
- ApplicationSecurityManager.cs
- DoubleLink.cs
- PropertyDescriptorCollection.cs
- StubHelpers.cs
- ProfileSettings.cs
- FlowDocumentPaginator.cs
- smtpconnection.cs
- StringReader.cs
- UnSafeCharBuffer.cs
- AtomServiceDocumentSerializer.cs
- QuotedPrintableStream.cs
- _NetworkingPerfCounters.cs
- BamlRecords.cs
- PersonalizationProviderCollection.cs
- InputProcessorProfilesLoader.cs
- LeaseManager.cs
- RtfFormatStack.cs
- Int64Converter.cs
- AbstractDataSvcMapFileLoader.cs
- SafeMarshalContext.cs
- CodeDefaultValueExpression.cs
- LocationUpdates.cs
- GroupItemAutomationPeer.cs
- ContainerAction.cs
- NTAccount.cs
- SelectedCellsChangedEventArgs.cs
- AssociationSetMetadata.cs
- CodeCommentStatement.cs
- TimeoutException.cs
- DbParameterCollectionHelper.cs
- ArgumentOutOfRangeException.cs
- PreviewKeyDownEventArgs.cs
- CodeTypeReferenceSerializer.cs
- OpCodes.cs
- GridViewColumnCollectionChangedEventArgs.cs
- HwndProxyElementProvider.cs
- Keywords.cs
- ParagraphResult.cs
- SizeLimitedCache.cs
- GridViewColumn.cs
- DesignerActionGlyph.cs
- InternalResources.cs
- RtType.cs
- EventHandlerList.cs
- Geometry.cs
- InputScope.cs
- TokenBasedSetEnumerator.cs
- ControlBindingsCollection.cs
- HttpFileCollection.cs
- ConnectionStringsExpressionBuilder.cs
- TreeNodeCollection.cs
- TreeViewItemAutomationPeer.cs
- Point3DAnimationBase.cs
- TextBox.cs
- smtpconnection.cs
- TypeValidationEventArgs.cs
- AlternateViewCollection.cs
- TableCell.cs
- ResourceReferenceExpressionConverter.cs
- PropertyEmitterBase.cs
- AuthenticationModulesSection.cs
- InternalPolicyElement.cs
- PageAdapter.cs
- CapabilitiesPattern.cs
- Maps.cs
- LineBreak.cs