Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Base / MS / Internal / TraceLevelStore.cs / 1 / TraceLevelStore.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: Storage for the "TraceLevel" attached property. // //--------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; namespace MS.Internal { ////// This class stores values for the attached property /// PresentationTraceSources.TraceLevel. /// internal static class TraceLevelStore { #region Constructors // // Constructors // #endregion Constructors #region Internal Methods // // Internal Methods // ////// Reads the attached property TraceLevel from the given element. /// internal static PresentationTraceLevel GetTraceLevel(object element) { PresentationTraceLevel result; if (element == null || _dictionary.Count == 0) { result = PresentationTraceLevel.None; } else { lock (_dictionary) { Key key = new Key(element); if (!_dictionary.TryGetValue(key, out result)) { result = PresentationTraceLevel.None; } } } return result; } ////// Writes the attached property TraceLevel to the given element. /// internal static void SetTraceLevel(object element, PresentationTraceLevel traceLevel) { if (element == null) return; lock (_dictionary) { Key key = new Key(element, true); if (traceLevel > PresentationTraceLevel.None) { _dictionary[key] = traceLevel; } else { _dictionary.Remove(key); } } } #endregion Internal Methods #region Private Fields // // Private Fields // private static Dictionary_dictionary = new Dictionary (); #endregion Private Fields #region Table Keys // the key for the dictionary: <((element)), hashcode> private struct Key { internal Key(object element, bool useWeakRef) { _element = new WeakReference(element); _hashcode = element.GetHashCode(); } internal Key(object element) { _element = element; _hashcode = element.GetHashCode(); } public override int GetHashCode() { #if DEBUG WeakReference wr = _element as WeakReference; object element = (wr != null) ? wr.Target : _element; if (element != null) { int hashcode = element.GetHashCode(); Debug.Assert(hashcode == _hashcode, "hashcodes disagree"); } #endif return _hashcode; } public override bool Equals(object o) { if (o is Key) { WeakReference wr; Key that = (Key)o; if (this._hashcode != that._hashcode) return false; wr = this._element as WeakReference; object s1 = (wr != null) ? wr.Target : this._element; wr = that._element as WeakReference; object s2 = (wr != null) ? wr.Target : that._element; if (s1!=null && s2!=null) return (s1 == s2); else return (this._element == that._element); } else { return false; } } public static bool operator==(Key key1, Key key2) { return key1.Equals(key2); } public static bool operator!=(Key key1, Key key2) { return !key1.Equals(key2); } object _element; // lookup: direct ref. In table: WeakRef int _hashcode; // cached, in case source is GC'd } #endregion Table Keys } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // // // Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: Storage for the "TraceLevel" attached property. // //--------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; namespace MS.Internal { ////// This class stores values for the attached property /// PresentationTraceSources.TraceLevel. /// internal static class TraceLevelStore { #region Constructors // // Constructors // #endregion Constructors #region Internal Methods // // Internal Methods // ////// Reads the attached property TraceLevel from the given element. /// internal static PresentationTraceLevel GetTraceLevel(object element) { PresentationTraceLevel result; if (element == null || _dictionary.Count == 0) { result = PresentationTraceLevel.None; } else { lock (_dictionary) { Key key = new Key(element); if (!_dictionary.TryGetValue(key, out result)) { result = PresentationTraceLevel.None; } } } return result; } ////// Writes the attached property TraceLevel to the given element. /// internal static void SetTraceLevel(object element, PresentationTraceLevel traceLevel) { if (element == null) return; lock (_dictionary) { Key key = new Key(element, true); if (traceLevel > PresentationTraceLevel.None) { _dictionary[key] = traceLevel; } else { _dictionary.Remove(key); } } } #endregion Internal Methods #region Private Fields // // Private Fields // private static Dictionary_dictionary = new Dictionary (); #endregion Private Fields #region Table Keys // the key for the dictionary: <((element)), hashcode> private struct Key { internal Key(object element, bool useWeakRef) { _element = new WeakReference(element); _hashcode = element.GetHashCode(); } internal Key(object element) { _element = element; _hashcode = element.GetHashCode(); } public override int GetHashCode() { #if DEBUG WeakReference wr = _element as WeakReference; object element = (wr != null) ? wr.Target : _element; if (element != null) { int hashcode = element.GetHashCode(); Debug.Assert(hashcode == _hashcode, "hashcodes disagree"); } #endif return _hashcode; } public override bool Equals(object o) { if (o is Key) { WeakReference wr; Key that = (Key)o; if (this._hashcode != that._hashcode) return false; wr = this._element as WeakReference; object s1 = (wr != null) ? wr.Target : this._element; wr = that._element as WeakReference; object s2 = (wr != null) ? wr.Target : that._element; if (s1!=null && s2!=null) return (s1 == s2); else return (this._element == that._element); } else { return false; } } public static bool operator==(Key key1, Key key2) { return key1.Equals(key2); } public static bool operator!=(Key key1, Key key2) { return !key1.Equals(key2); } object _element; // lookup: direct ref. In table: WeakRef int _hashcode; // cached, in case source is GC'd } #endregion Table Keys } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AttributeEmitter.cs
- ResourceDisplayNameAttribute.cs
- SQLGuid.cs
- RoutingService.cs
- BinaryConverter.cs
- XmlCharCheckingReader.cs
- Hex.cs
- InvalidContentTypeException.cs
- CodeTypeReference.cs
- CaseKeyBox.ViewModel.cs
- SqlDataSourceCommandEventArgs.cs
- Activity.cs
- ObjectList.cs
- DataComponentGenerator.cs
- MimeMapping.cs
- ProviderIncompatibleException.cs
- UnsafeNativeMethodsPenimc.cs
- IndexerNameAttribute.cs
- DrawingContextWalker.cs
- TextServicesProperty.cs
- QilStrConcatenator.cs
- ApplyTemplatesAction.cs
- CodeDefaultValueExpression.cs
- Encoder.cs
- TextStore.cs
- Triplet.cs
- SHA256Cng.cs
- BufferModesCollection.cs
- DataPagerFieldCollection.cs
- ReverseQueryOperator.cs
- Wildcard.cs
- CookieParameter.cs
- SoapExtensionTypeElementCollection.cs
- PropertyValueUIItem.cs
- TextPattern.cs
- Stack.cs
- CodeDelegateCreateExpression.cs
- Soap12FormatExtensions.cs
- SmiEventSink_Default.cs
- MultiBindingExpression.cs
- TypeUtil.cs
- SID.cs
- GlobalProxySelection.cs
- UnsafeNativeMethodsTablet.cs
- ElementUtil.cs
- CacheSection.cs
- WinCategoryAttribute.cs
- MaskedTextBoxDesignerActionList.cs
- HttpUnhandledOperationInvoker.cs
- EventLog.cs
- LightweightEntityWrapper.cs
- XmlSchemaException.cs
- CodeArrayIndexerExpression.cs
- WebPartHelpVerb.cs
- MulticastDelegate.cs
- FrameworkRichTextComposition.cs
- Figure.cs
- WindowsContainer.cs
- InvalidProgramException.cs
- ScrollableControl.cs
- OrderedDictionary.cs
- MulticastIPAddressInformationCollection.cs
- NumericUpDown.cs
- ReadOnlyTernaryTree.cs
- XhtmlTextWriter.cs
- Propagator.JoinPropagator.JoinPredicateVisitor.cs
- AsyncDataRequest.cs
- RegexReplacement.cs
- ReceiveContent.cs
- SqlUdtInfo.cs
- ValueSerializerAttribute.cs
- SelectionGlyph.cs
- BuildProvidersCompiler.cs
- XamlPointCollectionSerializer.cs
- WindowInteropHelper.cs
- XhtmlBasicValidationSummaryAdapter.cs
- MessageSecurityProtocolFactory.cs
- SynchronizedDispatch.cs
- DecimalAnimation.cs
- MasterPageCodeDomTreeGenerator.cs
- MetricEntry.cs
- MulticastOption.cs
- SharedStatics.cs
- EntitySqlException.cs
- CompilerTypeWithParams.cs
- CaseInsensitiveComparer.cs
- AnimatedTypeHelpers.cs
- MetadataItem.cs
- WindowsSlider.cs
- OverlappedAsyncResult.cs
- DataSourceCacheDurationConverter.cs
- ValueUnavailableException.cs
- DecoderFallbackWithFailureFlag.cs
- XPathNodeList.cs
- WindowsUserNameCachingSecurityTokenAuthenticator.cs
- ReferentialConstraint.cs
- EdmRelationshipRoleAttribute.cs
- XmlNullResolver.cs
- DataGridRowHeaderAutomationPeer.cs
- TreeNode.cs