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
- SvcMapFileSerializer.cs
- PTManager.cs
- DbConnectionClosed.cs
- DesignerListAdapter.cs
- InkCanvasAutomationPeer.cs
- SwitchDesigner.xaml.cs
- X509ChainElement.cs
- Matrix.cs
- SizeAnimation.cs
- DbDataReader.cs
- HotSpotCollection.cs
- AccessText.cs
- CapabilitiesAssignment.cs
- KeyedCollection.cs
- DefaultPrintController.cs
- WindowHideOrCloseTracker.cs
- TransformerTypeCollection.cs
- HttpConfigurationContext.cs
- Shape.cs
- ConfigurationLoader.cs
- PopupEventArgs.cs
- DecoderNLS.cs
- AdjustableArrowCap.cs
- OdbcRowUpdatingEvent.cs
- AssemblyNameProxy.cs
- ToolStripPanel.cs
- TextDocumentView.cs
- Sequence.cs
- RuntimeHelpers.cs
- UriSectionReader.cs
- BitmapDownload.cs
- HtmlInputControl.cs
- ItemMap.cs
- GridToolTip.cs
- Byte.cs
- FontStretches.cs
- LayoutEditorPart.cs
- ExpressionLexer.cs
- PageOutputColor.cs
- BlockUIContainer.cs
- NotCondition.cs
- Inflater.cs
- WorkflowTimerService.cs
- EllipseGeometry.cs
- XmlQueryStaticData.cs
- Container.cs
- PinnedBufferMemoryStream.cs
- CodeConstructor.cs
- BinarySerializer.cs
- CasesDictionary.cs
- RegexParser.cs
- contentDescriptor.cs
- SchemaComplexType.cs
- TextSyndicationContent.cs
- MachineKeyConverter.cs
- TemplateLookupAction.cs
- Clipboard.cs
- WebPartEventArgs.cs
- PageBuildProvider.cs
- EntityContainerEntitySet.cs
- HttpModulesInstallComponent.cs
- BaseInfoTable.cs
- TypeConverter.cs
- xmlfixedPageInfo.cs
- PingOptions.cs
- FragmentQuery.cs
- ConstrainedDataObject.cs
- XamlToRtfWriter.cs
- FixedSchema.cs
- GridItemPatternIdentifiers.cs
- TypeSystemHelpers.cs
- RequiredFieldValidator.cs
- XmlQualifiedName.cs
- AssociationSet.cs
- SafeTimerHandle.cs
- Scheduler.cs
- TextContainer.cs
- GeometryDrawing.cs
- CollectionChangeEventArgs.cs
- MetadataUtilsSmi.cs
- ScrollItemProviderWrapper.cs
- TypeViewSchema.cs
- StringExpressionSet.cs
- WinEventHandler.cs
- Parameter.cs
- MILUtilities.cs
- Geometry3D.cs
- SystemResources.cs
- WindowsIdentity.cs
- CompModSwitches.cs
- CryptoApi.cs
- BufferedWebEventProvider.cs
- CompilationUtil.cs
- DetailsViewRowCollection.cs
- ClientSettingsProvider.cs
- DefaultValueAttribute.cs
- PopupRoot.cs
- Decimal.cs
- BStrWrapper.cs
- RuleCache.cs