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
- ObjectDataSourceFilteringEventArgs.cs
- ParserContext.cs
- SqlComparer.cs
- KeyValueSerializer.cs
- ChannelRequirements.cs
- ToolStripDesignerAvailabilityAttribute.cs
- InfiniteTimeSpanConverter.cs
- ByteAnimationUsingKeyFrames.cs
- WebPartExportVerb.cs
- AutoCompleteStringCollection.cs
- MediaContext.cs
- DataSourceSelectArguments.cs
- ExtensionWindowHeader.cs
- AsnEncodedData.cs
- SvcMapFile.cs
- SecurityBindingElement.cs
- TreeNodeEventArgs.cs
- SQLResource.cs
- FileDialog_Vista.cs
- IdentityHolder.cs
- TrackBarRenderer.cs
- DateRangeEvent.cs
- LinqDataSourceStatusEventArgs.cs
- WebPartConnectionsCloseVerb.cs
- ToolStripDesignerUtils.cs
- CroppedBitmap.cs
- DataGridCommandEventArgs.cs
- ClientUtils.cs
- RequestCacheManager.cs
- HttpListenerPrefixCollection.cs
- WMIGenerator.cs
- SmiMetaData.cs
- AnimationLayer.cs
- NonParentingControl.cs
- MsmqBindingMonitor.cs
- AuthenticationManager.cs
- Int32CAMarshaler.cs
- TokenCreationException.cs
- ScrollViewerAutomationPeer.cs
- CornerRadiusConverter.cs
- QilTargetType.cs
- InternalBufferManager.cs
- TextDecorationCollection.cs
- SettingsSavedEventArgs.cs
- QuaternionValueSerializer.cs
- SqlUDTStorage.cs
- AsyncContentLoadedEventArgs.cs
- WebEventCodes.cs
- GlyphingCache.cs
- WpfXamlLoader.cs
- ConcatQueryOperator.cs
- LinqDataSourceHelper.cs
- ReadOnlyHierarchicalDataSource.cs
- MsmqInputSessionChannel.cs
- DataContractAttribute.cs
- ADConnectionHelper.cs
- DiagnosticTraceRecords.cs
- FixedSOMFixedBlock.cs
- XPathChildIterator.cs
- BitmapPalettes.cs
- DataGridViewRowsAddedEventArgs.cs
- SafeArrayTypeMismatchException.cs
- OptimisticConcurrencyException.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- RelationshipConverter.cs
- coordinatorfactory.cs
- TypeDelegator.cs
- DeviceContext2.cs
- DataServiceException.cs
- Registry.cs
- FormatControl.cs
- OutputCacheModule.cs
- BinHexEncoder.cs
- SQLConvert.cs
- WorkflowServiceHost.cs
- PlatformNotSupportedException.cs
- FullTextBreakpoint.cs
- EntityConnection.cs
- BitmapPalettes.cs
- WindowsListViewGroupHelper.cs
- XmlSchemaAll.cs
- ObjectListDataBindEventArgs.cs
- MediaEntryAttribute.cs
- EncoderFallback.cs
- WorkItem.cs
- StyleModeStack.cs
- TypeSchema.cs
- WebControl.cs
- Context.cs
- DataSourceView.cs
- SizeChangedEventArgs.cs
- CustomPopupPlacement.cs
- FragmentQueryKB.cs
- XmlDictionaryWriter.cs
- EnvelopedSignatureTransform.cs
- EntityDataSourceState.cs
- CursorConverter.cs
- InputScopeManager.cs
- ConfigurationStrings.cs
- FactoryGenerator.cs