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
- HMACMD5.cs
- PropertyGridDesigner.cs
- ProtocolViolationException.cs
- Base64Encoder.cs
- DbConnectionStringBuilder.cs
- MouseButton.cs
- _AutoWebProxyScriptHelper.cs
- WindowInteractionStateTracker.cs
- Stylus.cs
- PerformanceCountersElement.cs
- DefaultPrintController.cs
- Typography.cs
- ResourceAssociationTypeEnd.cs
- SecurityTokenParametersEnumerable.cs
- _ContextAwareResult.cs
- MediaElement.cs
- CriticalHandle.cs
- WeakReferenceEnumerator.cs
- SoapSchemaExporter.cs
- WorkerRequest.cs
- ReadWriteSpinLock.cs
- ExpressionPrefixAttribute.cs
- TextCompositionManager.cs
- HtmlInputButton.cs
- GroupDescription.cs
- WebResourceAttribute.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- StrokeIntersection.cs
- TypeConverterValueSerializer.cs
- ScrollProviderWrapper.cs
- DragEvent.cs
- DataGridViewColumnStateChangedEventArgs.cs
- DrawingContextDrawingContextWalker.cs
- TypefaceMap.cs
- HttpHandlerActionCollection.cs
- TableColumn.cs
- HandleRef.cs
- BitArray.cs
- serverconfig.cs
- ReadOnlyObservableCollection.cs
- OperationContractGenerationContext.cs
- ChtmlSelectionListAdapter.cs
- XmlAttributeCache.cs
- TabControl.cs
- Vertex.cs
- Image.cs
- XmlSchemaResource.cs
- Version.cs
- ProfileEventArgs.cs
- DuplicateMessageDetector.cs
- ActivitySurrogateSelector.cs
- CodeArgumentReferenceExpression.cs
- Baml2006ReaderSettings.cs
- TextMetrics.cs
- Pick.cs
- CheckBoxAutomationPeer.cs
- EntityDataSourceValidationException.cs
- SystemThemeKey.cs
- TemplatedMailWebEventProvider.cs
- TimeSpanStorage.cs
- HttpWrapper.cs
- DragEvent.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- SubMenuStyleCollection.cs
- PublisherMembershipCondition.cs
- UpdatePanel.cs
- NetTcpSecurityElement.cs
- HttpProtocolReflector.cs
- OdbcConnectionStringbuilder.cs
- Convert.cs
- ObjectItemNoOpAssemblyLoader.cs
- FixedHyperLink.cs
- FunctionDescription.cs
- CompressEmulationStream.cs
- VScrollBar.cs
- IList.cs
- _SafeNetHandles.cs
- CachingHintValidation.cs
- EventManager.cs
- BuildManager.cs
- PointCollectionConverter.cs
- Pointer.cs
- WorkflowMarkupSerializationException.cs
- RTLAwareMessageBox.cs
- Vector3DConverter.cs
- MatchAllMessageFilter.cs
- Hashtable.cs
- MetadataPropertyvalue.cs
- RecordsAffectedEventArgs.cs
- TimeSpanSecondsConverter.cs
- SchemaImporter.cs
- SqlException.cs
- Rfc2898DeriveBytes.cs
- GeometryValueSerializer.cs
- WebBrowserBase.cs
- ScrollItemProviderWrapper.cs
- HtmlToClrEventProxy.cs
- CompleteWizardStep.cs
- VarRemapper.cs
- AmbientValueAttribute.cs