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
- UrlPath.cs
- GeneratedContractType.cs
- StylusTip.cs
- ServiceMemoryGates.cs
- RepeaterCommandEventArgs.cs
- DataGridViewDataErrorEventArgs.cs
- Sql8ExpressionRewriter.cs
- PaintEvent.cs
- JoinQueryOperator.cs
- PhonemeConverter.cs
- DefaultSection.cs
- PieceNameHelper.cs
- XPathNodeHelper.cs
- DbMetaDataFactory.cs
- linebase.cs
- MiniParameterInfo.cs
- ExceptionUtility.cs
- HostProtectionException.cs
- SecurityTokenException.cs
- PrintPreviewDialog.cs
- DataRecord.cs
- StylusPointPropertyId.cs
- DescendantBaseQuery.cs
- Scene3D.cs
- metrodevice.cs
- TreeWalkHelper.cs
- SQLDecimal.cs
- DataControlExtensions.cs
- WebPartConnectionsConnectVerb.cs
- QuaternionIndependentAnimationStorage.cs
- BrushConverter.cs
- RadioButtonAutomationPeer.cs
- EditingCoordinator.cs
- HtmlInputText.cs
- Substitution.cs
- Certificate.cs
- ToolboxItem.cs
- ResourceProviderFactory.cs
- SHA384Managed.cs
- ResourceReferenceExpressionConverter.cs
- DataGridPageChangedEventArgs.cs
- Setter.cs
- GlobalizationAssembly.cs
- AuthenticationManager.cs
- ZipIOLocalFileHeader.cs
- OleDbMetaDataFactory.cs
- SessionParameter.cs
- BoolExpressionVisitors.cs
- WebPartZoneCollection.cs
- _IPv4Address.cs
- SapiRecognizer.cs
- XmlnsCache.cs
- BaseParser.cs
- SqlInfoMessageEvent.cs
- SafeCryptoHandles.cs
- VectorCollectionValueSerializer.cs
- ReadWriteSpinLock.cs
- CompensatableTransactionScopeActivityDesigner.cs
- DescendentsWalkerBase.cs
- Positioning.cs
- MeasurementDCInfo.cs
- SqlConnectionString.cs
- ListBase.cs
- Literal.cs
- MemberDomainMap.cs
- Durable.cs
- lengthconverter.cs
- HttpWebRequest.cs
- BatchServiceHost.cs
- BitConverter.cs
- Html32TextWriter.cs
- DataObjectSettingDataEventArgs.cs
- Set.cs
- _FtpDataStream.cs
- Message.cs
- BufferedGraphics.cs
- SmtpReplyReaderFactory.cs
- GenericTypeParameterBuilder.cs
- CompositeDuplexElement.cs
- SettingsAttributeDictionary.cs
- ConstructorExpr.cs
- XmlILOptimizerVisitor.cs
- FileAuthorizationModule.cs
- ReferenceEqualityComparer.cs
- GridViewColumnCollectionChangedEventArgs.cs
- TableProviderWrapper.cs
- TreeNodeStyleCollection.cs
- PreviewPageInfo.cs
- KernelTypeValidation.cs
- AuthenticationSection.cs
- ChildTable.cs
- WindowsRichEditRange.cs
- SimpleType.cs
- OfTypeExpression.cs
- ResolveDuplexAsyncResult.cs
- ParserContext.cs
- CodeVariableReferenceExpression.cs
- DiscoveryReference.cs
- SystemResources.cs
- ConfigXmlWhitespace.cs