Esempio n. 1
0
        public bool MoveToFollowing()
        {
            bool retval = false;
            GeneratorNodeHelper nodeHelper = new GeneratorNodeHelper(m_currentNode, m_index, m_sourceDataIndex);

            while (!retval)
            {
                retval = nodeHelper.MoveToNext();

                if (!retval)
                {
                    if (!nodeHelper.MoveToParent())
                    {
                        //cannot move to parent and could not move to next, this is the end of the chain.
                        break;
                    }
                }
            }

            if (retval)
            {
                m_currentNode     = nodeHelper.CurrentNode;
                m_index           = nodeHelper.Index;
                m_sourceDataIndex = nodeHelper.SourceDataIndex;
            }

            return(retval);
        }
Esempio n. 2
0
        public bool ReverseCalculateIndex()
        {
            // index need to be 0, as I will use the value from the index once I backtracked all the way to the root.
            GeneratorNodeHelper nodeHelper = new GeneratorNodeHelper(this.CurrentNode, 0, 0);

            while ((nodeHelper.CurrentNode.Previous != null) || (nodeHelper.CurrentNode.Parent != null))
            {
                if (!nodeHelper.MoveToPrevious())
                {
                    nodeHelper.MoveToParent();
                }
            }

            m_index           = System.Math.Abs(nodeHelper.Index);
            m_sourceDataIndex = System.Math.Abs(nodeHelper.SourceDataIndex);
            return(true);
        }
Esempio n. 3
0
        public bool MoveBackward()
        {
            bool recurseGroup = true;
            GeneratorNodeHelper nodeHelper = new GeneratorNodeHelper(m_currentNode, m_index, m_sourceDataIndex);

            do
            {
                GroupGeneratorNode groupNode = nodeHelper.CurrentNode as GroupGeneratorNode;

                if ((groupNode == null) && (nodeHelper.CurrentNode != m_currentNode) && (nodeHelper.CurrentNode.ItemCount != 0))
                {
                    m_currentNode     = nodeHelper.CurrentNode;
                    m_index           = nodeHelper.Index;
                    m_sourceDataIndex = nodeHelper.SourceDataIndex;
                    return(true);
                }

                if ((recurseGroup) && (nodeHelper.MoveToChild()))
                {
                    nodeHelper.MoveToEnd();
                    continue;
                }

                recurseGroup = true;

                if (nodeHelper.MoveToPrevious())
                {
                    continue;
                }


                if (nodeHelper.MoveToParent())
                {
                    recurseGroup = false;
                    continue;
                }

                break;
            }while(true);

            return(false);
        }