Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Base / MS / Internal / TraceLevelStore.cs / 3 / 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
- Region.cs
- SHA1Managed.cs
- PointAnimationBase.cs
- DiagnosticTraceSource.cs
- QilScopedVisitor.cs
- PropertySourceInfo.cs
- Shape.cs
- BuildProviderCollection.cs
- CodeGen.cs
- ResourcePermissionBase.cs
- GPPOINTF.cs
- CodeIdentifier.cs
- WSSecureConversationFeb2005.cs
- MTConfigUtil.cs
- ImmutableObjectAttribute.cs
- SqlStream.cs
- ForeignKeyConstraint.cs
- CustomBindingElementCollection.cs
- XmlDomTextWriter.cs
- RootContext.cs
- DataControlField.cs
- DataList.cs
- FlagsAttribute.cs
- TemplateBuilder.cs
- GridView.cs
- ColumnResizeUndoUnit.cs
- Options.cs
- ControlBuilderAttribute.cs
- SystemException.cs
- Utilities.cs
- UpdateEventArgs.cs
- CodeAccessSecurityEngine.cs
- UnmanagedMemoryStreamWrapper.cs
- ClusterSafeNativeMethods.cs
- DataGridViewColumnStateChangedEventArgs.cs
- ReflectTypeDescriptionProvider.cs
- ListItemViewAttribute.cs
- ScrollChrome.cs
- TableLayoutSettings.cs
- Font.cs
- ModelProperty.cs
- DecoderFallback.cs
- XmlChoiceIdentifierAttribute.cs
- WindowsSpinner.cs
- ControlCollection.cs
- Control.cs
- SqlDependencyListener.cs
- SecurityDescriptor.cs
- AssemblyInfo.cs
- NoResizeSelectionBorderGlyph.cs
- ScopelessEnumAttribute.cs
- FileUtil.cs
- AuthenticationModuleElementCollection.cs
- ReflectEventDescriptor.cs
- ManifestBasedResourceGroveler.cs
- DesignerActionVerbList.cs
- TagMapCollection.cs
- Mappings.cs
- LinearGradientBrush.cs
- PrincipalPermission.cs
- AtomicFile.cs
- Facet.cs
- TemplateBamlTreeBuilder.cs
- ServerValidateEventArgs.cs
- StringUtil.cs
- RequestSecurityTokenResponse.cs
- UIElementCollection.cs
- ConnectionInterfaceCollection.cs
- CroppedBitmap.cs
- FormViewPagerRow.cs
- SemanticValue.cs
- DataServiceHostFactory.cs
- XmlObjectSerializerWriteContextComplex.cs
- XPathParser.cs
- BamlBinaryReader.cs
- CqlParser.cs
- ItemAutomationPeer.cs
- OleDbErrorCollection.cs
- CategoryState.cs
- EventLogger.cs
- InteropBitmapSource.cs
- ScalarType.cs
- EncodingTable.cs
- XmlSchemaAnnotation.cs
- UIElement.cs
- DocumentSequenceHighlightLayer.cs
- InputDevice.cs
- OrderByBuilder.cs
- PropertyTabChangedEvent.cs
- Slider.cs
- MenuItem.cs
- QueryContinueDragEvent.cs
- MeasureItemEvent.cs
- ChannelSettingsElement.cs
- DiscreteKeyFrames.cs
- HMACSHA384.cs
- MutexSecurity.cs
- Pair.cs
- WindowsRichEdit.cs
- ReadWriteObjectLock.cs