// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/match/rdj-strgraph.c
// Function: gt_strgraph_traverse
static void gt_strgraph_traverse(GtStrgraph *strgraph,
    void(*process_start) (GtStrgraphVnum, void*),
    void(*process_edge) (GtStrgraphVnum, GtStrgraphLength, void*),
    void *data, bool show_progressbar)
{
  GtStrgraphVnum i;
  GtUint64 progress = 0;

  gt_assert(strgraph != NULL);

#ifdef GG_DEBUG
  gt_strgraph_count_junctions(strgraph);
#endif

  for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++)
    GT_STRGRAPH_V_SET_MARK(strgraph, i, GT_STRGRAPH_V_VACANT);

  if (show_progressbar)
    gt_progressbar_start(&progress,
        (GtUint64)GT_STRGRAPH_NOFVERTICES(strgraph));

  for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++)
  {
    if (GT_STRGRAPH_V_MARK(strgraph, i) != GT_STRGRAPH_V_ELIMINATED)
    {
      if (GT_STRGRAPH_V_OUTDEG(strgraph, i) == 0)
      {
        GT_STRGRAPH_V_SET_MARK(strgraph, i, GT_STRGRAPH_V_ELIMINATED);
      }
      else if (!GT_STRGRAPH_V_IS_INTERNAL(strgraph, i))
      {
        gt_strgraph_traverse_from_vertex(strgraph, i, process_start,
            process_edge, data);
        GT_STRGRAPH_V_SET_MARK(strgraph, i, GT_STRGRAPH_V_ELIMINATED);
      }
    }
    if (show_progressbar)
      progress++;
  }

  if (show_progressbar)
    gt_progressbar_stop();

  /* handle circles of internal vertices only */
  for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++)
  {
    if (GT_STRGRAPH_V_IS_INTERNAL(strgraph, i) &&
        GT_STRGRAPH_V_MARK(strgraph, i) != GT_STRGRAPH_V_ELIMINATED)
      gt_strgraph_traverse_from_vertex(strgraph, i, process_start,
          process_edge, data);
  }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %r8d, %ebp
movq %rcx, %rbx
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %r12
movq $0x0, (%rsp)
cmpq $0x0, 0x80(%rdi)
je 0x1d9c5f
xorl %r13d, %r13d
movq 0x58(%r12), %rax
testq %rax, %rax
je 0x1d9f12
cmpq %r13, 0x8(%rax)
jbe 0x1d9f12
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d9f12
movq (%rax), %rdi
movq %rdx, %rsi
imulq %r13, %rsi
xorl %ecx, %ecx
callq 0x2f388c
incq %r13
movq 0x80(%r12), %rsi
cmpq %rsi, %r13
jb 0x1d9c17
jmp 0x1d9c61
xorl %esi, %esi
testb %bpl, %bpl
je 0x1d9c76
movq %rsp, %rdi
callq 0x10ba28
movq 0x80(%r12), %rsi
testq %rsi, %rsi
je 0x1d9e0c
xorl %r13d, %r13d
movq 0x58(%r12), %rax
testq %rax, %rax
je 0x1d9f17
cmpq %r13, 0x8(%rax)
jbe 0x1d9f17
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d9f17
movq (%rax), %rdi
movq %rdx, %rsi
imulq %r13, %rsi
callq 0x2f37dc
cmpl $0x2, %eax
je 0x1d9ded
movq 0x70(%r12), %rax
testq %rax, %rax
je 0x1d9f21
cmpq %r13, 0x8(%rax)
jbe 0x1d9f21
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d9f21
movq (%rax), %rdi
movq %rdx, %rsi
imulq %r13, %rsi
callq 0x2f37dc
testq %rax, %rax
je 0x1d9db6
movq 0x70(%r12), %rax
testq %rax, %rax
je 0x1d9f2b
cmpq %r13, 0x8(%rax)
jbe 0x1d9f2b
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d9f2b
movq (%rax), %rdi
movq %rdx, %rsi
imulq %r13, %rsi
callq 0x2f37dc
cmpq $0x1, %rax
jne 0x1d9d7d
movq 0x70(%r12), %rax
testq %rax, %rax
je 0x1d9f3f
movl %r13d, %esi
andl $0x1, %esi
negq %rsi
orq $0x1, %rsi
addq %r13, %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1d9f3f
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d9f3f
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2f37dc
cmpq $0x1, %rax
je 0x1d9ded
movq %r12, %rdi
movq %r13, %rsi
movq %r15, %rdx
movq %r14, %rcx
movq %rbx, %r8
callq 0x1da019
movq 0x58(%r12), %rax
testq %rax, %rax
je 0x1d9f35
cmpq %r13, 0x8(%rax)
jbe 0x1d9f35
movl 0x10(%rax), %edx
cmpl $0x41, %edx
jb 0x1d9dda
jmp 0x1d9f35
movq 0x58(%r12), %rax
testq %rax, %rax
je 0x1d9f3a
cmpq %r13, 0x8(%rax)
jbe 0x1d9f3a
movl 0x10(%rax), %edx
cmpl $0x41, %edx
jae 0x1d9f3a
movl %edx, %esi
movq (%rax), %rdi
imulq %r13, %rsi
movl $0x2, %ecx
callq 0x2f388c
testb %bpl, %bpl
je 0x1d9df6
incq (%rsp)
incq %r13
movq 0x80(%r12), %rax
cmpq %rax, %r13
jb 0x1d9c82
jmp 0x1d9e0e
xorl %eax, %eax
testb %bpl, %bpl
je 0x1d9e20
callq 0x10bf8a
movq 0x80(%r12), %rax
testq %rax, %rax
je 0x1d9f03
xorl %r13d, %r13d
movq 0x70(%r12), %rax
testq %rax, %rax
je 0x1d9f1c
cmpq %r13, 0x8(%rax)
jbe 0x1d9f1c
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d9f1c
movq (%rax), %rdi
movq %rdx, %rsi
imulq %r13, %rsi
callq 0x2f37dc
cmpq $0x1, %rax
jne 0x1d9ef2
movq 0x70(%r12), %rax
testq %rax, %rax
je 0x1d9f26
movl %r13d, %esi
andl $0x1, %esi
negq %rsi
orq $0x1, %rsi
addq %r13, %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1d9f26
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d9f26
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2f37dc
cmpq $0x1, %rax
jne 0x1d9ef2
movq 0x58(%r12), %rax
testq %rax, %rax
je 0x1d9f30
cmpq %r13, 0x8(%rax)
jbe 0x1d9f30
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1d9f30
movq (%rax), %rdi
movq %rdx, %rsi
imulq %r13, %rsi
callq 0x2f37dc
cmpl $0x2, %eax
je 0x1d9ef2
movq %r12, %rdi
movq %r13, %rsi
movq %r15, %rdx
movq %r14, %rcx
movq %rbx, %r8
callq 0x1da019
incq %r13
cmpq 0x80(%r12), %r13
jb 0x1d9e2c
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x723c4
callq 0x7251a
callq 0x725c5
callq 0x724e1
callq 0x7258c
callq 0x7246f
callq 0x72553
callq 0x723fd
callq 0x724a8
callq 0x72436