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
- UserControlDesigner.cs
- CalendarDay.cs
- _HeaderInfo.cs
- BaseConfigurationRecord.cs
- WmpBitmapDecoder.cs
- TypeInitializationException.cs
- TextParaClient.cs
- ColorConvertedBitmapExtension.cs
- RepeatBehavior.cs
- FieldTemplateFactory.cs
- Pair.cs
- GeneralTransform3DGroup.cs
- ProtocolViolationException.cs
- ListViewItem.cs
- SecurityUtils.cs
- NameValueFileSectionHandler.cs
- StyleBamlTreeBuilder.cs
- PointCollection.cs
- TablePattern.cs
- EnumerableRowCollection.cs
- WebPartHelpVerb.cs
- TemplatedAdorner.cs
- HtmlCalendarAdapter.cs
- WorkflowServiceNamespace.cs
- AsyncCompletedEventArgs.cs
- TableFieldsEditor.cs
- CompilationSection.cs
- LeftCellWrapper.cs
- LoginName.cs
- EnumValidator.cs
- mediaclock.cs
- XmlName.cs
- XmlImplementation.cs
- CheckableControlBaseAdapter.cs
- ChtmlCommandAdapter.cs
- ManagementObjectSearcher.cs
- DataServiceStreamProviderWrapper.cs
- OracleConnectionFactory.cs
- TransformedBitmap.cs
- HandlerFactoryCache.cs
- ErrorInfoXmlDocument.cs
- GeometryCollection.cs
- DoubleIndependentAnimationStorage.cs
- PersonalizationEntry.cs
- ReadOnlyMetadataCollection.cs
- SendKeys.cs
- SubtreeProcessor.cs
- AddInAdapter.cs
- LabelDesigner.cs
- GridViewPageEventArgs.cs
- Parameter.cs
- ExternalDataExchangeService.cs
- BaseUriHelper.cs
- Select.cs
- LayoutInformation.cs
- DesignerOptions.cs
- MatrixConverter.cs
- PromptBuilder.cs
- CompareInfo.cs
- TextureBrush.cs
- ContentPlaceHolder.cs
- EntityDataSourceColumn.cs
- GridViewRowEventArgs.cs
- ProcessingInstructionAction.cs
- FSWPathEditor.cs
- BackStopAuthenticationModule.cs
- Delegate.cs
- WebServiceData.cs
- SecurityDescriptor.cs
- DbParameterCollectionHelper.cs
- CommunicationObjectAbortedException.cs
- WebDisplayNameAttribute.cs
- Stack.cs
- WhitespaceRuleLookup.cs
- DES.cs
- ConditionalAttribute.cs
- UnsafeNativeMethods.cs
- TreeNodeClickEventArgs.cs
- RecipientInfo.cs
- SettingsPropertyCollection.cs
- BaseCodeDomTreeGenerator.cs
- TraceData.cs
- DuplicateMessageDetector.cs
- SmtpMail.cs
- ZoneButton.cs
- WMIGenerator.cs
- TypeConverterAttribute.cs
- DataViewManagerListItemTypeDescriptor.cs
- ConditionBrowserDialog.cs
- List.cs
- EventSourceCreationData.cs
- LineUtil.cs
- SQLChars.cs
- ServiceHostingEnvironment.cs
- Automation.cs
- ToolStripContainerActionList.cs
- WebPartVerbCollection.cs
- ASCIIEncoding.cs
- XamlReaderConstants.cs
- Point4DConverter.cs