func findAncestor(x tree.Node, p *pathexpr.PathExpr, ret *[]tree.Node) { if x.GetNodeType() == tree.NtRoot { return } addNode(x.GetParent(), p, ret) findAncestor(x.GetParent(), p, ret) }
func findPrecedingSibling(x tree.Node, p *pathexpr.PathExpr, ret *[]tree.Node) { if x.GetNodeType() == tree.NtRoot { return } par := x.GetParent() ch := par.GetChildren() i := len(ch) - 1 for x != ch[i] { i-- } i-- for i >= 0 { findSelf(ch[i], p, ret) i-- } }
func findFollowingSibling(x tree.Node, p *pathexpr.PathExpr, ret *[]tree.Node) { if x.GetNodeType() == tree.NtRoot { return } par := x.GetParent() ch := par.GetChildren() i := 0 for x != ch[i] { i++ } i++ for i < len(ch) { findSelf(ch[i], p, ret) i++ } }
func findParent(x tree.Node, p *pathexpr.PathExpr, ret *[]tree.Node) { if x.GetNodeType() != tree.NtRoot { addNode(x.GetParent(), p, ret) } }