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
- MissingFieldException.cs
- QilGenerator.cs
- FormViewPagerRow.cs
- Vector3DConverter.cs
- SmtpCommands.cs
- ObjectDataSourceView.cs
- ObjectManager.cs
- SmtpLoginAuthenticationModule.cs
- DesignerHelpers.cs
- RegexMatch.cs
- IPHostEntry.cs
- ObjectStateEntry.cs
- Unit.cs
- FacetChecker.cs
- IpcManager.cs
- SQLDecimalStorage.cs
- UserInitiatedNavigationPermission.cs
- DelayedRegex.cs
- AssertUtility.cs
- SpecialNameAttribute.cs
- NotifyInputEventArgs.cs
- GenericAuthenticationEventArgs.cs
- ResourceDefaultValueAttribute.cs
- LayoutTableCell.cs
- CustomWebEventKey.cs
- DesignerCategoryAttribute.cs
- WebPermission.cs
- TextEditorParagraphs.cs
- ExplicitDiscriminatorMap.cs
- DataColumn.cs
- PagerSettings.cs
- InputProcessorProfilesLoader.cs
- SafeFileMapViewHandle.cs
- PrintPreviewDialog.cs
- WmfPlaceableFileHeader.cs
- NgenServicingAttributes.cs
- _NegotiateClient.cs
- XhtmlMobileTextWriter.cs
- IntSumAggregationOperator.cs
- SignedXml.cs
- TableLayoutPanelDesigner.cs
- GeometryDrawing.cs
- RelatedPropertyManager.cs
- VideoDrawing.cs
- MasterPageCodeDomTreeGenerator.cs
- RSAPKCS1SignatureDeformatter.cs
- LZCodec.cs
- LongValidatorAttribute.cs
- SiteMapHierarchicalDataSourceView.cs
- Polyline.cs
- baseaxisquery.cs
- EntityReference.cs
- SequentialUshortCollection.cs
- DocumentOutline.cs
- autovalidator.cs
- SqlXmlStorage.cs
- DefinitionProperties.cs
- LinkLabel.cs
- ProvideValueServiceProvider.cs
- ForEachDesigner.xaml.cs
- SkipStoryboardToFill.cs
- Automation.cs
- PeerUnsafeNativeCryptMethods.cs
- _DomainName.cs
- MeasureItemEvent.cs
- DataGridRowHeaderAutomationPeer.cs
- RankException.cs
- Bezier.cs
- DataGridItemAttachedStorage.cs
- CustomDictionarySources.cs
- FileDataSourceCache.cs
- FrugalMap.cs
- RemotingAttributes.cs
- LOSFormatter.cs
- Button.cs
- DriveInfo.cs
- XmlWriterTraceListener.cs
- PlainXmlSerializer.cs
- AspNetCompatibilityRequirementsAttribute.cs
- TextSegment.cs
- TreeBuilder.cs
- Point3DKeyFrameCollection.cs
- ChtmlTextWriter.cs
- CounterSampleCalculator.cs
- GeneralTransformGroup.cs
- HitTestWithGeometryDrawingContextWalker.cs
- TcpTransportSecurity.cs
- ScrollItemProviderWrapper.cs
- FSWPathEditor.cs
- FieldAccessException.cs
- ObjectCloneHelper.cs
- TableStyle.cs
- QilStrConcatenator.cs
- InvokeWebService.cs
- Tag.cs
- WebProxyScriptElement.cs
- ZipIOCentralDirectoryFileHeader.cs
- CurrentChangingEventManager.cs
- Queue.cs
- _AcceptOverlappedAsyncResult.cs