internal void MoveToParent(int depth, ForwardAxis parent) {
// "a/b/c", trying to match b (current node), but meet the end of a, so move pointer to a
if ( depth == this.curDepth - 1 ) {
// really need to move the current node pointer to parent
// what i did here is for seperating the case of IsDss or only IsChild
// bcoz in the first case i need to expect "a" from random depth
// -1 means it doesn't expect some specific depth (referecing the dealing to -1 in movetochild method
// while in the second case i can't change the root depth which is 1.
if ((this.curNode.Input == parent.RootNode ) && (parent.IsDss)) {
this.curNode = parent.RootNode;
this.rootDepth = this.curDepth = -1;
return;
}
else if (this.curNode.Input != null) { // else cur-depth --, cur-node change
this.curNode = (DoubleLinkAxis) (this.curNode.Input);
this.curDepth --;
return;
}
else return;
}
// "a/b/c", trying to match b (current node), but meet the end of x (another child of a)
// or maybe i matched, now move out the current node
// or move out after failing to match attribute
// the node i m next expecting is still the current node
else if (depth == this.curDepth) { // after matched or [2] failed in matching attribute
if (this.isMatch) {
this.isMatch = false;
}
}
return; // this node is still what i am expecting
// ignore
}