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
- RefreshPropertiesAttribute.cs
- List.cs
- XmlElementCollection.cs
- safelinkcollection.cs
- CroppedBitmap.cs
- CompilerError.cs
- COM2EnumConverter.cs
- ChooseAction.cs
- ErrorLog.cs
- UserCancellationException.cs
- EventLogPermission.cs
- VisualBasicImportReference.cs
- ModuleElement.cs
- HtmlDocument.cs
- StyleModeStack.cs
- Stack.cs
- AssemblyNameProxy.cs
- PointConverter.cs
- Debugger.cs
- Mappings.cs
- KnownAssemblyEntry.cs
- Rotation3D.cs
- LicenseManager.cs
- SpecularMaterial.cs
- JpegBitmapDecoder.cs
- CustomLineCap.cs
- DefaultPrintController.cs
- WrapPanel.cs
- ClearTypeHintValidation.cs
- ClassicBorderDecorator.cs
- ValidationError.cs
- SoapServerProtocol.cs
- SearchForVirtualItemEventArgs.cs
- Vector3DCollection.cs
- ContainerVisual.cs
- PermissionToken.cs
- TextRangeAdaptor.cs
- LinqExpressionNormalizer.cs
- DecimalKeyFrameCollection.cs
- AuthenticateEventArgs.cs
- DataTemplateSelector.cs
- RowType.cs
- SortKey.cs
- MsmqQueue.cs
- KeyboardEventArgs.cs
- IApplicationTrustManager.cs
- XmlBaseReader.cs
- EntitySetBase.cs
- AutoGeneratedField.cs
- oledbmetadatacollectionnames.cs
- ServiceReference.cs
- MaterialGroup.cs
- UnsignedPublishLicense.cs
- TextPenaltyModule.cs
- Int32Rect.cs
- Themes.cs
- PrintDialogDesigner.cs
- Config.cs
- ReflectPropertyDescriptor.cs
- _OverlappedAsyncResult.cs
- StaticSiteMapProvider.cs
- DoubleAnimationUsingPath.cs
- Task.cs
- MarkupWriter.cs
- XmlILOptimizerVisitor.cs
- TextEditorCharacters.cs
- MatrixCamera.cs
- ConnectionPointCookie.cs
- TrustLevelCollection.cs
- Converter.cs
- TreeViewImageKeyConverter.cs
- AddIn.cs
- QuaternionConverter.cs
- LogManagementAsyncResult.cs
- Point3D.cs
- HttpStreamXmlDictionaryReader.cs
- TokenBasedSet.cs
- MissingMemberException.cs
- WindowsStatusBar.cs
- SafeFindHandle.cs
- Rotation3DAnimationUsingKeyFrames.cs
- DataSourceView.cs
- ClassData.cs
- SystemIcmpV6Statistics.cs
- EntityCommandExecutionException.cs
- ScrollBarRenderer.cs
- SByteStorage.cs
- WinFormsSpinner.cs
- CacheAxisQuery.cs
- DataGridViewCellEventArgs.cs
- RSAOAEPKeyExchangeFormatter.cs
- SqlCaseSimplifier.cs
- XmlLoader.cs
- Win32.cs
- SafeProcessHandle.cs
- EditorPartChrome.cs
- InvokeMethodActivity.cs
- ExportOptions.cs
- BuildProviderUtils.cs
- UnicodeEncoding.cs