/// <summary>
        ///     Adds this tracker to the list of active containers.
        /// </summary>
        /// <param name="root">The root of the list.</param>
        internal void StartTracking(ref ContainerTracking <T> root)
        {
            // Add the node to the root
            if (root != null)
            {
                root._previous = this;
            }

            _next = root;
            root  = this;
        }
        /// <summary>
        ///     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
        /// </summary>
        private bool IsInList(ContainerTracking <T> root)
        {
            ContainerTracking <T> node = root;

            while (node != null)
            {
                if (node == this)
                {
                    return(true);
                }

                node = node._next;
            }

            return(false);
        }
        /// <summary>
        ///     Removes this tracker from the list of active containers.
        /// </summary>
        /// <param name="root">The root of the list.</param>
        internal void StopTracking(ref ContainerTracking <T> root)
        {
            // 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;
        }
        internal void Debug_AssertNotInList(ContainerTracking <T> root)
        {
#if DEBUG
            Debug.Assert(!IsInList(root), "This container shouldn't be in our tracking list");
#endif
        }
        internal void Debug_AssertIsInList(ContainerTracking <T> root)
        {
#if DEBUG
            Debug.Assert(IsInList(root), "This container should be in the tracking list.");
#endif
        }
Ejemplo n.º 6
0
 /// <summary>
 ///     Instantiates a new instance of this class.
 /// </summary>
 public DataGridRow()
 {
     _tracker = new ContainerTracking <DataGridRow>(this);
 }
 /// <summary>
 ///     Instantiates a new instance of this class.
 /// </summary>
 public DataGridCell()
 {
     _tracker = new ContainerTracking <DataGridCell>(this);
 }