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
- TaskHelper.cs
- DataTableCollection.cs
- NavigationPropertySingletonExpression.cs
- PersistChildrenAttribute.cs
- InstalledFontCollection.cs
- DocComment.cs
- SystemFonts.cs
- TranslateTransform.cs
- PermissionRequestEvidence.cs
- ToolStripPanelRenderEventArgs.cs
- UIElementHelper.cs
- AllMembershipCondition.cs
- IItemContainerGenerator.cs
- SqlDataSourceStatusEventArgs.cs
- MultipartContentParser.cs
- DataSourceXmlAttributeAttribute.cs
- serverconfig.cs
- OverflowException.cs
- HtmlWindow.cs
- COM2PictureConverter.cs
- SecurityKeyEntropyMode.cs
- SqlProcedureAttribute.cs
- ProtectedProviderSettings.cs
- TitleStyle.cs
- X509CertificateChain.cs
- StatusBarItemAutomationPeer.cs
- Simplifier.cs
- SqlGatherProducedAliases.cs
- WebBrowserDocumentCompletedEventHandler.cs
- CacheManager.cs
- SoapEnumAttribute.cs
- ContentPresenter.cs
- DeploymentExceptionMapper.cs
- WmlCalendarAdapter.cs
- FontInfo.cs
- CellConstantDomain.cs
- HtmlElement.cs
- TabPage.cs
- ListControlStringCollectionEditor.cs
- XmlSchemaAnyAttribute.cs
- SQLDouble.cs
- EnumType.cs
- _FtpControlStream.cs
- SqlBuilder.cs
- FixUp.cs
- StandardTransformFactory.cs
- Point3D.cs
- categoryentry.cs
- KeysConverter.cs
- IdentityModelStringsVersion1.cs
- ScrollItemPattern.cs
- ZipFileInfo.cs
- FormatPage.cs
- Help.cs
- XmlAutoDetectWriter.cs
- HtmlUtf8RawTextWriter.cs
- CompatibleComparer.cs
- GeometryGroup.cs
- wmiprovider.cs
- ContentWrapperAttribute.cs
- DataGridHelper.cs
- TextModifierScope.cs
- BamlRecordReader.cs
- _DigestClient.cs
- EntityConnection.cs
- EncryptedReference.cs
- EntityReference.cs
- CommonObjectSecurity.cs
- SqlDependencyUtils.cs
- DeviceSpecificChoiceCollection.cs
- HtmlLiteralTextAdapter.cs
- RangeValidator.cs
- DataGridViewImageColumn.cs
- AdornedElementPlaceholder.cs
- SQLSingle.cs
- ArithmeticException.cs
- DataGridAddNewRow.cs
- dtdvalidator.cs
- SourceFileBuildProvider.cs
- TypedDatasetGenerator.cs
- FloaterParagraph.cs
- Int32.cs
- SchemaImporter.cs
- Mutex.cs
- WebException.cs
- AuthenticationException.cs
- XmlCharType.cs
- StreamReader.cs
- DeflateStream.cs
- formatter.cs
- WebPartEditVerb.cs
- ResourcesGenerator.cs
- DataBoundControlParameterTarget.cs
- FontCacheLogic.cs
- EntityCollection.cs
- EventInfo.cs
- BamlResourceDeserializer.cs
- LocalizabilityAttribute.cs
- VirtualPathUtility.cs
- DynamicMethod.cs