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
- BufferedResponseStream.cs
- ScriptDescriptor.cs
- RawUIStateInputReport.cs
- AutoScrollHelper.cs
- PenLineJoinValidation.cs
- RelativeSource.cs
- SystemIPv4InterfaceProperties.cs
- ProfessionalColorTable.cs
- Validator.cs
- OdbcErrorCollection.cs
- RadioButton.cs
- RemoteWebConfigurationHostStream.cs
- EventMappingSettingsCollection.cs
- FacetValues.cs
- _FtpControlStream.cs
- SchemaImporter.cs
- PiiTraceSource.cs
- EventEntry.cs
- CannotUnloadAppDomainException.cs
- LinearQuaternionKeyFrame.cs
- BoundPropertyEntry.cs
- PathData.cs
- RSAPKCS1SignatureFormatter.cs
- PrimitiveList.cs
- CompletedAsyncResult.cs
- GenericAuthenticationEventArgs.cs
- DetailsViewInsertEventArgs.cs
- DataGridColumnEventArgs.cs
- ReturnEventArgs.cs
- SchemaAttDef.cs
- XmlAggregates.cs
- SafeSecurityHandles.cs
- HttpProfileBase.cs
- Hex.cs
- GetImportedCardRequest.cs
- ServiceOperationListItem.cs
- WinFormsComponentEditor.cs
- TreeWalkHelper.cs
- ItemsControlAutomationPeer.cs
- BufferAllocator.cs
- StateMachineWorkflowDesigner.cs
- InsufficientExecutionStackException.cs
- TextChange.cs
- RijndaelManagedTransform.cs
- ControlPaint.cs
- ExpressionBuilderCollection.cs
- LinearGradientBrush.cs
- SAPICategories.cs
- ScrollProviderWrapper.cs
- EdmComplexTypeAttribute.cs
- FirewallWrapper.cs
- NetworkStream.cs
- HttpCookieCollection.cs
- RelationshipNavigation.cs
- HebrewCalendar.cs
- Cursor.cs
- CodeSnippetCompileUnit.cs
- Ref.cs
- WebPartDescription.cs
- RelationshipType.cs
- NavigationWindow.cs
- DictionaryManager.cs
- CharAnimationUsingKeyFrames.cs
- XmlSchemaExporter.cs
- Command.cs
- TaskFormBase.cs
- TreeWalkHelper.cs
- BamlLocalizabilityResolver.cs
- RMEnrollmentPage3.cs
- DataServiceContext.cs
- SignatureDescription.cs
- Rect3D.cs
- WindowCollection.cs
- CodeCatchClause.cs
- MdiWindowListStrip.cs
- ContextProperty.cs
- SolidColorBrush.cs
- CheckBoxBaseAdapter.cs
- DragDrop.cs
- EditorBrowsableAttribute.cs
- DriveNotFoundException.cs
- MediaElementAutomationPeer.cs
- VectorKeyFrameCollection.cs
- RangeBase.cs
- DataRelation.cs
- StreamInfo.cs
- PropertyTabAttribute.cs
- LinqDataSourceUpdateEventArgs.cs
- RangeBase.cs
- SqlIdentifier.cs
- ToolStripGripRenderEventArgs.cs
- METAHEADER.cs
- messageonlyhwndwrapper.cs
- Decoder.cs
- Tokenizer.cs
- WebPageTraceListener.cs
- EntityDescriptor.cs
- RayHitTestParameters.cs
- Section.cs
- TraceShell.cs