Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ShaderEffect.cs
- BoundField.cs
- PeerCollaboration.cs
- DbConnectionHelper.cs
- GridViewColumn.cs
- DesignerWithHeader.cs
- Byte.cs
- LocatorPartList.cs
- ActivationArguments.cs
- ResolveMatchesApril2005.cs
- RegisteredScript.cs
- DictionaryGlobals.cs
- ControlBuilderAttribute.cs
- RootBrowserWindowProxy.cs
- RadialGradientBrush.cs
- SqlUtils.cs
- TagPrefixAttribute.cs
- AttributeXamlType.cs
- DetailsViewRowCollection.cs
- MatcherBuilder.cs
- XmlSerializationReader.cs
- ReachPageContentCollectionSerializerAsync.cs
- ByteConverter.cs
- BindingExpressionBase.cs
- UIElement.cs
- Variant.cs
- MessageQueueConverter.cs
- TemplateField.cs
- ObservableCollectionDefaultValueFactory.cs
- ReadOnlyDictionary.cs
- basenumberconverter.cs
- SByte.cs
- BasicExpressionVisitor.cs
- DataObjectMethodAttribute.cs
- IsolatedStorage.cs
- OdbcTransaction.cs
- ValueUnavailableException.cs
- DiagnosticsConfigurationHandler.cs
- AncestorChangedEventArgs.cs
- entityreference_tresulttype.cs
- ScalarConstant.cs
- URL.cs
- Codec.cs
- HostedNamedPipeTransportManager.cs
- HttpClientCertificate.cs
- DiscoveryClient.cs
- RegexWriter.cs
- NonPrimarySelectionGlyph.cs
- DefaultPrintController.cs
- SchemaEntity.cs
- WeakReferenceEnumerator.cs
- DefaultAsyncDataDispatcher.cs
- WeakHashtable.cs
- TagPrefixInfo.cs
- LicenseProviderAttribute.cs
- TextEffectResolver.cs
- RemotingException.cs
- EndpointNameMessageFilter.cs
- SimpleWorkerRequest.cs
- TaskCanceledException.cs
- SqlCacheDependencyDatabase.cs
- PropertyMappingExceptionEventArgs.cs
- CaseInsensitiveComparer.cs
- Stack.cs
- Descriptor.cs
- FlowLayoutSettings.cs
- StrokeCollection2.cs
- ResolveMatchesMessageCD1.cs
- XmlNamespaceDeclarationsAttribute.cs
- PagesChangedEventArgs.cs
- SHA384.cs
- QueryBranchOp.cs
- AutomationPropertyInfo.cs
- FlowLayout.cs
- XmlDictionaryString.cs
- EpmTargetPathSegment.cs
- StateRuntime.cs
- RemoveFromCollection.cs
- EventDrivenDesigner.cs
- XmlSchemaImporter.cs
- Size.cs
- ThrowHelper.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- ServiceChannelManager.cs
- EntityClassGenerator.cs
- NamedPipeProcessProtocolHandler.cs
- XhtmlBasicImageAdapter.cs
- ObjectCloneHelper.cs
- serverconfig.cs
- LongSumAggregationOperator.cs
- CacheDependency.cs
- TemplateParser.cs
- HandlerBase.cs
- SqlCommandBuilder.cs
- DrawingImage.cs
- CompoundFileStorageReference.cs
- ObjectItemLoadingSessionData.cs
- ToolboxItemWrapper.cs
- Subtree.cs
- ExternalFile.cs