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
- FlowPosition.cs
- ActivityWithResultValueSerializer.cs
- SqlBooleanizer.cs
- ExpressionVisitor.cs
- BatchWriter.cs
- UnicodeEncoding.cs
- DurableErrorHandler.cs
- PropertyTabAttribute.cs
- TraceContextRecord.cs
- AppSettingsSection.cs
- XmlAttributes.cs
- ThreadAbortException.cs
- TextParagraphCache.cs
- UnsafeNativeMethods.cs
- HttpCapabilitiesEvaluator.cs
- RegexFCD.cs
- XmlSchemaRedefine.cs
- DataColumn.cs
- RtfToken.cs
- SplitterEvent.cs
- IPipelineRuntime.cs
- LinqDataSourceHelper.cs
- NetMsmqBinding.cs
- BmpBitmapDecoder.cs
- EditorBrowsableAttribute.cs
- DBSchemaRow.cs
- SwitchAttribute.cs
- BevelBitmapEffect.cs
- QilFactory.cs
- ILGenerator.cs
- ServiceModelExtensionCollectionElement.cs
- ApplicationTrust.cs
- Pair.cs
- XmlEncoding.cs
- HwndSourceParameters.cs
- NodeFunctions.cs
- StrokeIntersection.cs
- loginstatus.cs
- XPathNode.cs
- counter.cs
- AppDomainManager.cs
- TileModeValidation.cs
- SafeCloseHandleCritical.cs
- FilterableAttribute.cs
- CssStyleCollection.cs
- EntityDataSourceDataSelection.cs
- ErrorInfoXmlDocument.cs
- XmlUtf8RawTextWriter.cs
- CodeIdentifier.cs
- EventSetter.cs
- TrackingProfile.cs
- BitmapEffectInput.cs
- PointAnimationUsingKeyFrames.cs
- Dictionary.cs
- ModelItemDictionaryImpl.cs
- TextServicesCompartmentContext.cs
- FloaterBaseParaClient.cs
- Rights.cs
- UnionExpr.cs
- DataGridViewAdvancedBorderStyle.cs
- DataGridViewDataErrorEventArgs.cs
- ListBoxItemWrapperAutomationPeer.cs
- MdImport.cs
- HandlerMappingMemo.cs
- IdnMapping.cs
- PtsPage.cs
- EncodingInfo.cs
- complextypematerializer.cs
- ObjectStateEntryDbDataRecord.cs
- RequestResizeEvent.cs
- _DomainName.cs
- Bits.cs
- LockedActivityGlyph.cs
- SiteIdentityPermission.cs
- Parameter.cs
- ExpressionBuilder.cs
- JoinElimination.cs
- ProviderUtil.cs
- FamilyTypefaceCollection.cs
- Soap11ServerProtocol.cs
- EntityAdapter.cs
- SupportsEventValidationAttribute.cs
- VBIdentifierDesigner.xaml.cs
- NetCodeGroup.cs
- SafeBitVector32.cs
- RichTextBoxAutomationPeer.cs
- ResourceCategoryAttribute.cs
- ResourceWriter.cs
- CollectionDataContractAttribute.cs
- TextEndOfSegment.cs
- Debug.cs
- PropertyGrid.cs
- PrimitiveXmlSerializers.cs
- DocumentReference.cs
- EventBuilder.cs
- OrderedHashRepartitionEnumerator.cs
- HtmlInputButton.cs
- RuntimeResourceSet.cs
- DocumentsTrace.cs
- InputBindingCollection.cs