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
- SystemIPGlobalProperties.cs
- EventSetter.cs
- ExpandoClass.cs
- Rectangle.cs
- ISAPIRuntime.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- SerializationObjectManager.cs
- Visual3D.cs
- SqlProviderManifest.cs
- SqlUserDefinedAggregateAttribute.cs
- BoundField.cs
- MenuItemCollectionEditor.cs
- CollectionMarkupSerializer.cs
- DataPagerField.cs
- GridItem.cs
- HtmlValidationSummaryAdapter.cs
- DashStyle.cs
- SqlVersion.cs
- PerfCounters.cs
- Pen.cs
- PermissionToken.cs
- sqlinternaltransaction.cs
- BitSet.cs
- ResourceReferenceExpression.cs
- SendSecurityHeaderElementContainer.cs
- DictionaryKeyPropertyAttribute.cs
- Operand.cs
- MarkedHighlightComponent.cs
- UnsafeNativeMethods.cs
- WebSysDisplayNameAttribute.cs
- sortedlist.cs
- DecimalAnimationBase.cs
- CollectionConverter.cs
- QilChoice.cs
- Publisher.cs
- OutputWindow.cs
- ImageMap.cs
- EdmItemCollection.cs
- TransformerConfigurationWizardBase.cs
- ExceptionHelpers.cs
- UnsafeNativeMethods.cs
- SubMenuStyle.cs
- DetailsViewRow.cs
- Content.cs
- ListItemCollection.cs
- WsdlBuildProvider.cs
- OdbcDataAdapter.cs
- CreateRefExpr.cs
- EventRecordWrittenEventArgs.cs
- AdRotator.cs
- Barrier.cs
- LogicalTreeHelper.cs
- SettingsBase.cs
- ManagementClass.cs
- SemanticTag.cs
- columnmapkeybuilder.cs
- sitestring.cs
- SessionStateModule.cs
- LineServicesCallbacks.cs
- LinkUtilities.cs
- SchemaNotation.cs
- QueueProcessor.cs
- FrugalMap.cs
- ObjectDataSourceView.cs
- KeyValueInternalCollection.cs
- RemotingAttributes.cs
- PeerSecurityManager.cs
- NativeMethods.cs
- SessionEndingEventArgs.cs
- XmlReader.cs
- StringConverter.cs
- DataGridToolTip.cs
- ILGenerator.cs
- XappLauncher.cs
- RequestCache.cs
- RtType.cs
- FileEnumerator.cs
- StatusBarAutomationPeer.cs
- CryptoHandle.cs
- GiveFeedbackEventArgs.cs
- TypeName.cs
- EntityDataSourceReferenceGroup.cs
- TraceLevelHelper.cs
- Process.cs
- ProtectedProviderSettings.cs
- EntityContainerRelationshipSetEnd.cs
- Events.cs
- MultipleViewPatternIdentifiers.cs
- ExternalDataExchangeService.cs
- PasswordDeriveBytes.cs
- Table.cs
- BigInt.cs
- FormattedTextSymbols.cs
- NativeMethods.cs
- DesignerVerbToolStripMenuItem.cs
- GeometryHitTestResult.cs
- LicenseProviderAttribute.cs
- smtpconnection.cs
- StickyNoteAnnotations.cs
- HwndSourceParameters.cs