Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WindowCollection.cs
- ThreadNeutralSemaphore.cs
- MetadataArtifactLoaderCompositeResource.cs
- AnnotationObservableCollection.cs
- ellipse.cs
- ExpressionPrinter.cs
- BufferedStream2.cs
- GridToolTip.cs
- SystemWebSectionGroup.cs
- Function.cs
- UndoManager.cs
- RoleGroup.cs
- ScaleTransform3D.cs
- SqlDataSourceCommandParser.cs
- PersistencePipeline.cs
- PrintingPermissionAttribute.cs
- DataMisalignedException.cs
- SqlDataSourceFilteringEventArgs.cs
- Translator.cs
- Rect3DValueSerializer.cs
- FileDialogCustomPlacesCollection.cs
- OutputCacheProfileCollection.cs
- PartialClassGenerationTask.cs
- LazyTextWriterCreator.cs
- RemoteWebConfigurationHostStream.cs
- ColumnTypeConverter.cs
- ModulesEntry.cs
- ConsumerConnectionPointCollection.cs
- ConfigXmlElement.cs
- X509WindowsSecurityToken.cs
- ThicknessKeyFrameCollection.cs
- AlignmentYValidation.cs
- LeafCellTreeNode.cs
- ScalarType.cs
- EDesignUtil.cs
- Point3DAnimationUsingKeyFrames.cs
- DefaultCompensation.cs
- LinkLabel.cs
- NavigationProgressEventArgs.cs
- Rect3D.cs
- SortedSet.cs
- Double.cs
- EntryWrittenEventArgs.cs
- Context.cs
- WebPartCatalogAddVerb.cs
- Touch.cs
- PageParserFilter.cs
- DefaultWorkflowTransactionService.cs
- MobileControlDesigner.cs
- TableLayoutRowStyleCollection.cs
- EventDescriptorCollection.cs
- ResourcePermissionBase.cs
- NotSupportedException.cs
- LogicalTreeHelper.cs
- FocusWithinProperty.cs
- DeferredTextReference.cs
- XmlSchemaAttribute.cs
- BinaryFormatterWriter.cs
- XmlHierarchicalEnumerable.cs
- DropSource.cs
- DecoderFallback.cs
- MapPathBasedVirtualPathProvider.cs
- DiscoveryDocument.cs
- WmlTextBoxAdapter.cs
- VisualProxy.cs
- NullRuntimeConfig.cs
- IntegerValidatorAttribute.cs
- Configuration.cs
- XmlUrlResolver.cs
- Attributes.cs
- TextBoxLine.cs
- MailMessage.cs
- BindingGroup.cs
- TypeElement.cs
- VectorKeyFrameCollection.cs
- RoutingBehavior.cs
- CatalogPartChrome.cs
- RectAnimation.cs
- Rotation3D.cs
- CmsUtils.cs
- DbConnectionStringBuilder.cs
- EntityContainerEntitySet.cs
- ConnectorSelectionGlyph.cs
- ErrorFormatterPage.cs
- EntityCommand.cs
- DataReceivedEventArgs.cs
- RawStylusInputCustomData.cs
- DateTimeStorage.cs
- XmlSchemaSimpleContent.cs
- ViewKeyConstraint.cs
- TemplateBamlRecordReader.cs
- ConfigXmlSignificantWhitespace.cs
- ToolStripSeparatorRenderEventArgs.cs
- SmiContext.cs
- ContentOperations.cs
- ResourceExpression.cs
- SimpleBitVector32.cs
- GatewayDefinition.cs
- SecurityTokenParametersEnumerable.cs
- Int32AnimationBase.cs