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
- DataGridViewCellEventArgs.cs
- ImageInfo.cs
- COMException.cs
- FontDriver.cs
- ContractListAdapter.cs
- TrackingValidationObjectDictionary.cs
- XmlCompatibilityReader.cs
- BooleanExpr.cs
- WebServiceEndpoint.cs
- ExtensionCollection.cs
- ConnectionsZone.cs
- SymbolMethod.cs
- HMACRIPEMD160.cs
- OleDbRowUpdatedEvent.cs
- UInt64.cs
- LocalFileSettingsProvider.cs
- SqlCachedBuffer.cs
- FixedStringLookup.cs
- ReflectTypeDescriptionProvider.cs
- CursorConverter.cs
- TranslateTransform.cs
- TreeView.cs
- MemoryFailPoint.cs
- BlurEffect.cs
- LoginCancelEventArgs.cs
- DataGridCellAutomationPeer.cs
- MethodBody.cs
- DecoderBestFitFallback.cs
- X509Certificate2Collection.cs
- SqlProfileProvider.cs
- XmlBaseReader.cs
- BufferModesCollection.cs
- FocusChangedEventArgs.cs
- DynamicPropertyHolder.cs
- WsdlInspector.cs
- ProcessInfo.cs
- MetadataArtifactLoaderFile.cs
- EntityKey.cs
- FixedSOMSemanticBox.cs
- TargetInvocationException.cs
- OracleParameterCollection.cs
- CodeIdentifier.cs
- UnsafeNativeMethods.cs
- Symbol.cs
- Codec.cs
- ListDataBindEventArgs.cs
- SatelliteContractVersionAttribute.cs
- QuaternionAnimationBase.cs
- _DigestClient.cs
- BindingListCollectionView.cs
- PropertyDescriptorGridEntry.cs
- WorkflowRuntimeService.cs
- MouseEventArgs.cs
- BamlVersionHeader.cs
- EditorBrowsableAttribute.cs
- SerialPinChanges.cs
- LocalIdKeyIdentifierClause.cs
- DocumentPageView.cs
- InitializerFacet.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- DrawingContextWalker.cs
- FontStyleConverter.cs
- DbParameterCollectionHelper.cs
- AttributeUsageAttribute.cs
- IteratorFilter.cs
- RawStylusInputCustomDataList.cs
- BamlRecords.cs
- IgnoreSectionHandler.cs
- XmlSchemaSet.cs
- NativeWrapper.cs
- ImageIndexEditor.cs
- AssemblyHash.cs
- DurationConverter.cs
- BaseValidator.cs
- CurrentChangedEventManager.cs
- RightsManagementEncryptedStream.cs
- SelectionGlyph.cs
- _SecureChannel.cs
- Point.cs
- DocumentViewerBase.cs
- XmlStringTable.cs
- CustomCredentialPolicy.cs
- SqlAliasesReferenced.cs
- RuleDefinitions.cs
- UiaCoreApi.cs
- InternalControlCollection.cs
- ServiceDescription.cs
- BinHexEncoder.cs
- ConnectionStringsExpressionBuilder.cs
- MarkupObject.cs
- ApplicationServicesHostFactory.cs
- ActivityInstanceReference.cs
- DbProviderFactory.cs
- _ListenerRequestStream.cs
- SecurityDescriptor.cs
- TextPointer.cs
- ConfigurationStrings.cs
- ObjectManager.cs
- HwndMouseInputProvider.cs
- FixedPageProcessor.cs