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
- BitmapEffect.cs
- DataGridDetailsPresenterAutomationPeer.cs
- Rectangle.cs
- TransformerTypeCollection.cs
- UnsafeNativeMethods.cs
- ExceptionHandler.cs
- XmlSchemaAttribute.cs
- WorkflowServiceOperationListItem.cs
- ValidateNames.cs
- DataObjectAttribute.cs
- CompilerScopeManager.cs
- xsdvalidator.cs
- ConnectionsZone.cs
- CopyAction.cs
- CompatibleComparer.cs
- ChannelDispatcher.cs
- Style.cs
- Italic.cs
- SerializableAttribute.cs
- MenuItemBindingCollection.cs
- HelpEvent.cs
- CardSpaceSelector.cs
- hwndwrapper.cs
- DbBuffer.cs
- GeometryGroup.cs
- OdbcFactory.cs
- DynamicQueryStringParameter.cs
- AttachedPropertyBrowsableAttribute.cs
- ObjectItemCachedAssemblyLoader.cs
- DoubleCollectionValueSerializer.cs
- NonBatchDirectoryCompiler.cs
- SizeAnimation.cs
- indexingfiltermarshaler.cs
- SpellCheck.cs
- FilterQuery.cs
- TypeElement.cs
- ExceptionValidationRule.cs
- TemplateKey.cs
- SystemIPInterfaceStatistics.cs
- ListBoxItem.cs
- CompilationSection.cs
- CryptoProvider.cs
- SoapFaultCodes.cs
- ApplicationSecurityManager.cs
- ArrayWithOffset.cs
- UnsafeMethods.cs
- ActivationArguments.cs
- ConfigurationStrings.cs
- TextFormatter.cs
- ConnectionProviderAttribute.cs
- SiteMapDataSourceView.cs
- ValueUnavailableException.cs
- DispatcherSynchronizationContext.cs
- Soap12ProtocolImporter.cs
- Point4DConverter.cs
- sqlstateclientmanager.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- FixedPosition.cs
- EventLogEntryCollection.cs
- ObjectStorage.cs
- RotateTransform.cs
- EdmProperty.cs
- TreeWalkHelper.cs
- TemplateXamlParser.cs
- _DigestClient.cs
- UriExt.cs
- HelpKeywordAttribute.cs
- ResXFileRef.cs
- _LocalDataStoreMgr.cs
- SafeNativeMethods.cs
- EntityDataSourceContainerNameItem.cs
- EmulateRecognizeCompletedEventArgs.cs
- MethodExpr.cs
- Help.cs
- Adorner.cs
- ListControlDesigner.cs
- HTTPNotFoundHandler.cs
- FactoryId.cs
- oledbmetadatacollectionnames.cs
- AssemblyResolver.cs
- DBConnectionString.cs
- ToolStripPanelRow.cs
- ShaderRenderModeValidation.cs
- DataFormats.cs
- CompiledXpathExpr.cs
- PartitionerQueryOperator.cs
- ReflectionHelper.cs
- GridSplitter.cs
- StrongNameUtility.cs
- ContextStack.cs
- SystemColors.cs
- TreeNodeBindingCollection.cs
- CodeObjectCreateExpression.cs
- TypeSystemProvider.cs
- TripleDESCryptoServiceProvider.cs
- PropertySegmentSerializer.cs
- BindingMAnagerBase.cs
- FixedSOMTableCell.cs
- BoundConstants.cs
- PropertyManager.cs