Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Controls / ContainerTracking.cs / 1305600 / ContainerTracking.cs
//---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.ComponentModel; using System.Diagnostics; using System.Windows; using System.Windows.Controls.Primitives; using System.Windows.Input; namespace System.Windows.Controls { ////// Represents a node in a linked list used to track active containers. /// Containers should instantiate and references these. /// Parents hold onto the linked list. /// /// The list is iterated in order to call a variety of methods on containers /// in response to changes on the parent. /// internal class ContainerTracking{ internal ContainerTracking(T container) { _container = container; } /// /// The row container that this object represents. /// internal T Container { get { return _container; } } ////// The next node in the list. /// internal ContainerTrackingNext { get { return _next; } } /// /// The previous node in the list. /// internal ContainerTrackingPrevious { get { return _previous; } } /// /// Adds this tracker to the list of active containers. /// /// The root of the list. internal void StartTracking(ref ContainerTrackingroot) { // Add the node to the root if (root != null) { root._previous = this; } _next = root; root = this; } /// /// Removes this tracker from the list of active containers. /// /// The root of the list. internal void StopTracking(ref ContainerTrackingroot) { // Unhook the node from the list if (_previous != null) { _previous._next = _next; } if (_next != null) { _next._previous = _previous; } // Update the root reference if (root == this) { root = _next; } // Clear the node's references _previous = null; _next = null; } #region Debugging Helpers /// /// Asserts that the container represented by this tracker is in the list represented by the given root. /// [Conditional("DEBUG")] internal void Debug_AssertIsInList(ContainerTrackingroot) { #if DEBUG Debug.Assert(IsInList(root), "This container should be in the tracking list."); #endif } /// /// Asserts that the container represented by this tracker is not in the list represented by the given root. /// [Conditional("DEBUG")] internal void Debug_AssertNotInList(ContainerTrackingroot) { #if DEBUG Debug.Assert(!IsInList(root), "This container shouldn't be in our tracking list"); #endif } #if DEBUG /// /// Checks that this tracker is present in the list starting with root. It's a linear walk through the list, so should be used /// mostly for debugging /// private bool IsInList(ContainerTrackingroot) { ContainerTracking node = root; while (node != null) { if (node == this) { return true; } node = node._next; } return false; } #endif #endregion private T _container; private ContainerTracking _next; private ContainerTracking _previous; } } // 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. // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.ComponentModel; using System.Diagnostics; using System.Windows; using System.Windows.Controls.Primitives; using System.Windows.Input; namespace System.Windows.Controls { /// /// Represents a node in a linked list used to track active containers. /// Containers should instantiate and references these. /// Parents hold onto the linked list. /// /// The list is iterated in order to call a variety of methods on containers /// in response to changes on the parent. /// internal class ContainerTracking{ internal ContainerTracking(T container) { _container = container; } /// /// The row container that this object represents. /// internal T Container { get { return _container; } } ////// The next node in the list. /// internal ContainerTrackingNext { get { return _next; } } /// /// The previous node in the list. /// internal ContainerTrackingPrevious { get { return _previous; } } /// /// Adds this tracker to the list of active containers. /// /// The root of the list. internal void StartTracking(ref ContainerTrackingroot) { // Add the node to the root if (root != null) { root._previous = this; } _next = root; root = this; } /// /// Removes this tracker from the list of active containers. /// /// The root of the list. internal void StopTracking(ref ContainerTrackingroot) { // Unhook the node from the list if (_previous != null) { _previous._next = _next; } if (_next != null) { _next._previous = _previous; } // Update the root reference if (root == this) { root = _next; } // Clear the node's references _previous = null; _next = null; } #region Debugging Helpers /// /// Asserts that the container represented by this tracker is in the list represented by the given root. /// [Conditional("DEBUG")] internal void Debug_AssertIsInList(ContainerTrackingroot) { #if DEBUG Debug.Assert(IsInList(root), "This container should be in the tracking list."); #endif } /// /// Asserts that the container represented by this tracker is not in the list represented by the given root. /// [Conditional("DEBUG")] internal void Debug_AssertNotInList(ContainerTrackingroot) { #if DEBUG Debug.Assert(!IsInList(root), "This container shouldn't be in our tracking list"); #endif } #if DEBUG /// /// Checks that this tracker is present in the list starting with root. It's a linear walk through the list, so should be used /// mostly for debugging /// private bool IsInList(ContainerTrackingroot) { ContainerTracking node = root; while (node != null) { if (node == this) { return true; } node = node._next; } return false; } #endif #endregion private T _container; private ContainerTracking _next; private ContainerTracking _previous; } } // 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
- DocumentApplicationJournalEntry.cs
- XmlNodeList.cs
- DataGridViewDesigner.cs
- HttpClientCertificate.cs
- SqlHelper.cs
- PersianCalendar.cs
- NotImplementedException.cs
- X509Certificate2Collection.cs
- Currency.cs
- securitycriticaldataformultiplegetandset.cs
- QfeChecker.cs
- PropertyFilter.cs
- _UriSyntax.cs
- ApplicationBuildProvider.cs
- SqlBooleanizer.cs
- MostlySingletonList.cs
- NotifyInputEventArgs.cs
- GridItemCollection.cs
- Focus.cs
- InternalConfirm.cs
- CacheChildrenQuery.cs
- AssertSection.cs
- AccessDataSource.cs
- ExclusiveTcpTransportManager.cs
- XmlQualifiedName.cs
- FileStream.cs
- EnumValidator.cs
- CallbackCorrelationInitializer.cs
- ControlPaint.cs
- Collection.cs
- NetworkAddressChange.cs
- ObjectDataSourceDisposingEventArgs.cs
- LambdaCompiler.Lambda.cs
- XmlLinkedNode.cs
- ExtendLockAsyncResult.cs
- ScriptingWebServicesSectionGroup.cs
- PageThemeCodeDomTreeGenerator.cs
- Activity.cs
- CacheModeConverter.cs
- TransformationRules.cs
- IntegerFacetDescriptionElement.cs
- SmiSettersStream.cs
- ObjectManager.cs
- PenCursorManager.cs
- TemplateBamlTreeBuilder.cs
- SqlGenericUtil.cs
- LongCountAggregationOperator.cs
- SvcMapFileLoader.cs
- SqlInternalConnection.cs
- SqlCommandBuilder.cs
- BitmapEffectInput.cs
- WindowsAuthenticationModule.cs
- KeyEventArgs.cs
- Int32Rect.cs
- XmlSchemas.cs
- AuthenticatedStream.cs
- WithParamAction.cs
- DataException.cs
- SafeReadContext.cs
- OutputCacheSection.cs
- VectorAnimation.cs
- SecurityPolicyVersion.cs
- FloatUtil.cs
- BamlBinaryReader.cs
- AppDomainManager.cs
- MediaTimeline.cs
- OutputScopeManager.cs
- WebConfigurationManager.cs
- SQLRoleProvider.cs
- XmlAttribute.cs
- NamespaceDecl.cs
- _BufferOffsetSize.cs
- SmtpSection.cs
- Mutex.cs
- SwitchAttribute.cs
- SQLInt32.cs
- ExpandedProjectionNode.cs
- GetMemberBinder.cs
- ScriptControlDescriptor.cs
- AvTraceDetails.cs
- RegexCharClass.cs
- BrowserCapabilitiesCodeGenerator.cs
- ManagedWndProcTracker.cs
- WSHttpBindingCollectionElement.cs
- StylusButton.cs
- WebRequestModuleElementCollection.cs
- Misc.cs
- QilExpression.cs
- DataMemberConverter.cs
- Type.cs
- DbProviderFactories.cs
- ChannelTokenTypeConverter.cs
- SecurityTokenResolver.cs
- EventMap.cs
- InputLanguageProfileNotifySink.cs
- XmlEntity.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- EventRouteFactory.cs
- FocusChangedEventArgs.cs
- SourceLineInfo.cs