// File: /workspace/github_c_makefile_star2_O1/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)
movq 0x80(%rdi), %rsi
testq %rsi, %rsi
je 0x1e349a
xorl %r13d, %r13d
movq 0x58(%r12), %rax
testq %rax, %rax
je 0x1e3740
cmpq %r13, 0x8(%rax)
jbe 0x1e3740
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1e3740
movq (%rax), %rdi
movq %rdx, %rsi
imulq %r13, %rsi
xorl %ecx, %ecx
callq 0x2fcd13
incq %r13
movq 0x80(%r12), %rsi
cmpq %rsi, %r13
jb 0x1e3454
testb %bpl, %bpl
je 0x1e34a7
movq %rsp, %rdi
callq 0x110c6c
cmpq $0x0, 0x80(%r12)
je 0x1e363e
xorl %r13d, %r13d
movq 0x58(%r12), %rax
testq %rax, %rax
je 0x1e3745
cmpq %r13, 0x8(%rax)
jbe 0x1e3745
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1e3745
movq (%rax), %rdi
movq %rdx, %rsi
imulq %r13, %rsi
callq 0x2fcc2c
cmpl $0x2, %eax
je 0x1e3624
movq 0x70(%r12), %rax
testq %rax, %rax
je 0x1e374f
cmpq %r13, 0x8(%rax)
jbe 0x1e374f
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1e374f
movq (%rax), %rdi
movq %rdx, %rsi
imulq %r13, %rsi
callq 0x2fcc2c
testq %rax, %rax
je 0x1e35ed
movq 0x70(%r12), %rax
testq %rax, %rax
je 0x1e3759
cmpq %r13, 0x8(%rax)
jbe 0x1e3759
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1e3759
movq (%rax), %rdi
movq %rdx, %rsi
imulq %r13, %rsi
callq 0x2fcc2c
cmpq $0x1, %rax
jne 0x1e35b4
movq 0x70(%r12), %rax
testq %rax, %rax
je 0x1e376d
movl %r13d, %esi
andl $0x1, %esi
negq %rsi
orq $0x1, %rsi
addq %r13, %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1e376d
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1e376d
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2fcc2c
cmpq $0x1, %rax
je 0x1e3624
movq %r12, %rdi
movq %r13, %rsi
movq %r15, %rdx
movq %r14, %rcx
movq %rbx, %r8
callq 0x1e3847
movq 0x58(%r12), %rax
testq %rax, %rax
je 0x1e3763
cmpq %r13, 0x8(%rax)
jbe 0x1e3763
movl 0x10(%rax), %edx
cmpl $0x41, %edx
jb 0x1e3611
jmp 0x1e3763
movq 0x58(%r12), %rax
testq %rax, %rax
je 0x1e3768
cmpq %r13, 0x8(%rax)
jbe 0x1e3768
movl 0x10(%rax), %edx
cmpl $0x41, %edx
jae 0x1e3768
movl %edx, %esi
movq (%rax), %rdi
imulq %r13, %rsi
movl $0x2, %ecx
callq 0x2fcd13
testb %bpl, %bpl
je 0x1e362d
incq (%rsp)
incq %r13
cmpq 0x80(%r12), %r13
jb 0x1e34b9
testb %bpl, %bpl
je 0x1e3648
callq 0x111189
cmpq $0x0, 0x80(%r12)
je 0x1e3731
xorl %r13d, %r13d
movq 0x70(%r12), %rax
testq %rax, %rax
je 0x1e374a
cmpq %r13, 0x8(%rax)
jbe 0x1e374a
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1e374a
movq (%rax), %rdi
movq %rdx, %rsi
imulq %r13, %rsi
callq 0x2fcc2c
cmpq $0x1, %rax
jne 0x1e3720
movq 0x70(%r12), %rax
testq %rax, %rax
je 0x1e3754
movl %r13d, %esi
andl $0x1, %esi
negq %rsi
orq $0x1, %rsi
addq %r13, %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1e3754
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1e3754
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2fcc2c
cmpq $0x1, %rax
jne 0x1e3720
movq 0x58(%r12), %rax
testq %rax, %rax
je 0x1e375e
cmpq %r13, 0x8(%rax)
jbe 0x1e375e
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1e375e
movq (%rax), %rdi
movq %rdx, %rsi
imulq %r13, %rsi
callq 0x2fcc2c
cmpl $0x2, %eax
je 0x1e3720
movq %r12, %rdi
movq %r13, %rsi
movq %r15, %rdx
movq %r14, %rcx
movq %rbx, %r8
callq 0x1e3847
incq %r13
cmpq 0x80(%r12), %r13
jb 0x1e365a
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x73fa6
callq 0x740fc
callq 0x741a7
callq 0x740c3
callq 0x7416e
callq 0x74051
callq 0x74135
callq 0x73fdf
callq 0x7408a
callq 0x74018