Example #1
0
int HaploTree::Traverse(IntArray & pointer, IntArray & state) const
   {
   while (pointer.Length())
      {
      int branch = pointer.Peek();
      int & allele = state[levels[branch]];
      int next = -1;

      while (++allele < alleleCounts[levels[branch]])
         if ((next = PeekBranch(branch, allele)) != -1)
            break;

      if (next == -1)
         {
         allele = -1;
         pointer.Pop();
         continue;
         }

      if (levels[branch] == depth - 1)
         return next;

      pointer.Push(next);
      }

   return -1;
   }