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
- FixedTextBuilder.cs
- TextRange.cs
- ProxyWebPartConnectionCollection.cs
- FormatPage.cs
- XappLauncher.cs
- XsltSettings.cs
- RemoteWebConfigurationHostServer.cs
- COM2ColorConverter.cs
- EventSchemaTraceListener.cs
- PhysicalAddress.cs
- WorkflowRuntimeBehavior.cs
- GridViewEditEventArgs.cs
- XmlTextAttribute.cs
- WindowsClientCredential.cs
- DrawingAttributeSerializer.cs
- MergeFilterQuery.cs
- LinqExpressionNormalizer.cs
- TokenFactoryBase.cs
- BitmapMetadataEnumerator.cs
- CompositeActivityTypeDescriptorProvider.cs
- CssTextWriter.cs
- Token.cs
- SchemaImporterExtensionElementCollection.cs
- assemblycache.cs
- ModelUIElement3D.cs
- SqlIdentifier.cs
- Screen.cs
- ComponentEvent.cs
- XsltInput.cs
- Pts.cs
- Application.cs
- FolderBrowserDialogDesigner.cs
- ListControlActionList.cs
- _BufferOffsetSize.cs
- Internal.cs
- ImageDrawing.cs
- ItemDragEvent.cs
- CompilerResults.cs
- GiveFeedbackEventArgs.cs
- PageRanges.cs
- BadImageFormatException.cs
- OptimizedTemplateContent.cs
- ISFTagAndGuidCache.cs
- RemotingSurrogateSelector.cs
- ObjectTypeMapping.cs
- Camera.cs
- QuotedPrintableStream.cs
- OleDbStruct.cs
- MemoryStream.cs
- XmlSchemaElement.cs
- TextDecorations.cs
- TransportDefaults.cs
- CollectionConverter.cs
- ThreadExceptionDialog.cs
- ExpressionBuilderContext.cs
- CodeExporter.cs
- Point.cs
- TextModifierScope.cs
- Solver.cs
- ServicePoint.cs
- StructuralObject.cs
- AuthenticationModuleElement.cs
- DynamicField.cs
- _Win32.cs
- PolicyChain.cs
- DesignTimeSiteMapProvider.cs
- TypeBrowser.xaml.cs
- ThemeDictionaryExtension.cs
- SoapTypeAttribute.cs
- Attributes.cs
- DesignerDataParameter.cs
- ApplicationDirectory.cs
- DesignerValidatorAdapter.cs
- AliasGenerator.cs
- ExecutionTracker.cs
- UncommonField.cs
- CanExpandCollapseAllConverter.cs
- RelationshipEndMember.cs
- BoundColumn.cs
- MDIClient.cs
- SizeIndependentAnimationStorage.cs
- TransportManager.cs
- EventLogPropertySelector.cs
- FloaterBaseParagraph.cs
- EncodingDataItem.cs
- StylusButton.cs
- PathFigure.cs
- FontStretchConverter.cs
- StringConcat.cs
- NotificationContext.cs
- BackStopAuthenticationModule.cs
- EventWaitHandleSecurity.cs
- LinearKeyFrames.cs
- BooleanExpr.cs
- TextDecoration.cs
- DefaultWorkflowTransactionService.cs
- ModifyActivitiesPropertyDescriptor.cs
- FileDialogCustomPlace.cs
- Point4D.cs
- BamlCollectionHolder.cs