Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / MS / Internal / TraceLevelStore.cs / 1305600 / 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
- Binding.cs
- PageParserFilter.cs
- Stack.cs
- HttpHandlersSection.cs
- XmlUtil.cs
- OrderedDictionary.cs
- AbstractExpressions.cs
- DropTarget.cs
- ErrorProvider.cs
- RequiredAttributeAttribute.cs
- JsonDeserializer.cs
- EnumerableRowCollection.cs
- HttpRuntime.cs
- CounterSample.cs
- CompareInfo.cs
- Sequence.cs
- CanonicalFormWriter.cs
- SmiXetterAccessMap.cs
- StringPropertyBuilder.cs
- WebPartDescription.cs
- RequestResponse.cs
- ReaderWriterLockSlim.cs
- WorkflowWebHostingModule.cs
- WindowsTooltip.cs
- StringTraceRecord.cs
- OracleConnectionFactory.cs
- MultiView.cs
- RouteParser.cs
- dbenumerator.cs
- ImageBrush.cs
- NumberSubstitution.cs
- LiteralControl.cs
- OrderedDictionary.cs
- RotationValidation.cs
- ReachSerializerAsync.cs
- BulletDecorator.cs
- CultureTable.cs
- PageEventArgs.cs
- ChildrenQuery.cs
- _Events.cs
- ListViewCommandEventArgs.cs
- ExceptionCollection.cs
- ButtonFieldBase.cs
- UniqueSet.cs
- IsolatedStorageFilePermission.cs
- ConnectionPoolRegistry.cs
- MimeMapping.cs
- ConvertersCollection.cs
- MasterPageBuildProvider.cs
- ToolboxItemFilterAttribute.cs
- WebEventTraceProvider.cs
- BamlBinaryReader.cs
- FocusManager.cs
- FloaterBaseParagraph.cs
- SizeFConverter.cs
- WebPartDisplayModeEventArgs.cs
- DataServiceKeyAttribute.cs
- MeasurementDCInfo.cs
- ListViewUpdateEventArgs.cs
- Soap12ProtocolReflector.cs
- HttpListenerPrefixCollection.cs
- SynchronizedDispatch.cs
- KeyedHashAlgorithm.cs
- ClientRoleProvider.cs
- TimelineGroup.cs
- Empty.cs
- MethodRental.cs
- StorageEndPropertyMapping.cs
- FunctionParameter.cs
- SafeNativeMethods.cs
- parserscommon.cs
- QuadraticBezierSegment.cs
- Wizard.cs
- RemoveStoryboard.cs
- CloudCollection.cs
- StreamInfo.cs
- PageWrapper.cs
- DataGridViewEditingControlShowingEventArgs.cs
- ApplicationManager.cs
- VariableValue.cs
- WorkflowViewStateService.cs
- XamlToRtfParser.cs
- Vector3DConverter.cs
- ComponentEvent.cs
- FindCriteriaElement.cs
- SupportingTokenSecurityTokenResolver.cs
- RegexRunnerFactory.cs
- WorkflowInstanceRecord.cs
- UserControlAutomationPeer.cs
- SafeTokenHandle.cs
- HttpPostedFile.cs
- ExpandSegment.cs
- LabelEditEvent.cs
- PropertyRef.cs
- HttpCacheVary.cs
- RegisteredDisposeScript.cs
- ComUdtElement.cs
- XmlReflectionImporter.cs
- RefreshEventArgs.cs
- WebPartCatalogCloseVerb.cs