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
- AssemblyFilter.cs
- baseaxisquery.cs
- BuildProviderAppliesToAttribute.cs
- RoutedPropertyChangedEventArgs.cs
- FileIOPermission.cs
- HuffCodec.cs
- PageWrapper.cs
- ApplicationCommands.cs
- PrintDialog.cs
- CustomErrorsSection.cs
- NavigatorOutput.cs
- XmlQuerySequence.cs
- entityreference_tresulttype.cs
- FtpWebResponse.cs
- PtsHelper.cs
- PerfCounterSection.cs
- DefaultParameterValueAttribute.cs
- QilBinary.cs
- PenLineCapValidation.cs
- SqlProfileProvider.cs
- SmtpFailedRecipientException.cs
- CacheMemory.cs
- TypefaceMetricsCache.cs
- WindowsButton.cs
- ServiceHost.cs
- NamedPipeDuplicateContext.cs
- LayoutUtils.cs
- ByteAnimationUsingKeyFrames.cs
- HttpApplicationFactory.cs
- ChangeConflicts.cs
- TCEAdapterGenerator.cs
- TextCollapsingProperties.cs
- HttpHandlersInstallComponent.cs
- DataStorage.cs
- EventManager.cs
- Baml6ConstructorInfo.cs
- AutoResizedEvent.cs
- ControlCollection.cs
- SubclassTypeValidatorAttribute.cs
- BinaryFormatter.cs
- ExpressionBinding.cs
- Cursor.cs
- WrapPanel.cs
- TreeViewDataItemAutomationPeer.cs
- DesignDataSource.cs
- SqlDataSourceEnumerator.cs
- DetailsViewUpdateEventArgs.cs
- ResourceSet.cs
- EventLog.cs
- PipelineDeploymentState.cs
- DbConnectionStringBuilder.cs
- ResourceReferenceKeyNotFoundException.cs
- MsmqBindingElementBase.cs
- MetadataCacheItem.cs
- CacheMode.cs
- ProfilePropertySettings.cs
- BinaryObjectReader.cs
- BmpBitmapDecoder.cs
- FontCacheUtil.cs
- GridPattern.cs
- NodeFunctions.cs
- TabControlDesigner.cs
- wgx_sdk_version.cs
- ItemsPanelTemplate.cs
- TemplateKeyConverter.cs
- UndirectedGraph.cs
- DesigntimeLicenseContext.cs
- TextTreeUndo.cs
- AssemblyHash.cs
- XmlAttributeAttribute.cs
- DataGridViewColumnCollection.cs
- DataGridViewAutoSizeModeEventArgs.cs
- InputReportEventArgs.cs
- InertiaExpansionBehavior.cs
- TaskFormBase.cs
- UnsafeCollabNativeMethods.cs
- SessionEndingEventArgs.cs
- ApplicationContext.cs
- OleDragDropHandler.cs
- FormViewPageEventArgs.cs
- ShaderEffect.cs
- ContextMenuStripActionList.cs
- Calendar.cs
- NullableDoubleAverageAggregationOperator.cs
- DateTimePicker.cs
- SchemaLookupTable.cs
- CommonXSendMessage.cs
- InvokePatternIdentifiers.cs
- ToolStripLabel.cs
- ZipIOLocalFileDataDescriptor.cs
- WindowsFormsLinkLabel.cs
- ElementHost.cs
- AnnotationStore.cs
- ListenerHandler.cs
- DataViewListener.cs
- LineSegment.cs
- GroupAggregateExpr.cs
- ResourceDefaultValueAttribute.cs
- TypeBuilder.cs
- StorageConditionPropertyMapping.cs