// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/ltr/ltr_classify_stream.c
// Function: gt_ltr_classify_stream_next
static int gt_ltr_classify_stream_next(GtNodeStream *ns,
                                       GtGenomeNode **gn,
                                       GtError *err)
{
  GtLTRClassifyStream *lcs;
  GtGenomeNode *ref_gn;
  int had_err = 0;

  gt_error_check(err);
  lcs = gt_ltr_classify_stream_cast(ns);
  if (lcs->first_next) {
    while (!(had_err = gt_node_stream_next(lcs->in_stream, gn, err)) && *gn) {
      gt_assert(*gn && !had_err);
      ref_gn = gt_genome_node_ref(*gn);
      gt_array_add(lcs->nodes, ref_gn);
    }
    if (!had_err)
      had_err = classify_ltrs(lcs->nodes, lcs->features, lcs->famprefix,
                              lcs->current_state, lcs->progress, err);
    if (!had_err) {
      *gn = *(GtGenomeNode**) gt_array_get(lcs->nodes, lcs->next_index);
      lcs->next_index++;
      lcs->first_next = false;
      return 0;
    }
  } else {
    if (lcs->next_index >= gt_array_size(lcs->nodes))
      *gn = NULL;
    else {
      *gn = *(GtGenomeNode**) gt_array_get(lcs->nodes, lcs->next_index);
      lcs->next_index++;
    }
    return 0;
  }
  return had_err;
}

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x38(%rsp)
movq %rsi, 0x30(%rsp)
movq %rdx, 0x28(%rsp)
movl $0x0, 0x14(%rsp)
cmpq $0x0, 0x28(%rsp)
je 0x2fdd9b
movq 0x28(%rsp), %rdi
callq 0xd8a60
testb $0x1, %al
jne 0x2fdd63
jmp 0x2fdd9b
movq 0x33e236(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x21829f(%rip), %rsi    # 0x516013
leaq 0x218444(%rip), %rdx    # 0x5161bf
leaq 0x294772(%rip), %rcx    # 0x5924f4
leaq 0x294787(%rip), %r8     # 0x592510
movl $0x180, %r9d            # imm = 0x180
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2fdd9d
callq 0x2fdc50
movq %rax, %rdi
movq 0x38(%rsp), %rsi
callq 0x1b20f0
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
testb $0x1, 0x38(%rax)
je 0x2fdf16
jmp 0x2fddc5
movq 0x20(%rsp), %rax
movq 0x10(%rax), %rdi
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdx
callq 0x1b1d90
movl %eax, %ecx
movl %ecx, 0x14(%rsp)
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, 0x13(%rsp)
jne 0x2fddfe
movq 0x30(%rsp), %rax
cmpq $0x0, (%rax)
setne %al
movb %al, 0x13(%rsp)
movb 0x13(%rsp), %al
testb $0x1, %al
jne 0x2fde08
jmp 0x2fde85
jmp 0x2fde0a
movq 0x30(%rsp), %rax
cmpq $0x0, (%rax)
je 0x2fde1c
cmpl $0x0, 0x14(%rsp)
je 0x2fde54
movq 0x33e17d(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2181e6(%rip), %rsi    # 0x516013
leaq 0x24edcc(%rip), %rdx    # 0x54cc00
leaq 0x2946b9(%rip), %rcx    # 0x5924f4
leaq 0x2946ce(%rip), %r8     # 0x592510
movl $0x184, %r9d            # imm = 0x184
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2fde56
movq 0x30(%rsp), %rax
movq (%rax), %rdi
callq 0x171410
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rax
movq 0x18(%rax), %rdi
leaq 0x18(%rsp), %rsi
movl $0x8, %edx
callq 0x81100
jmp 0x2fddc5
cmpl $0x0, 0x14(%rsp)
jne 0x2fdec7
movq 0x20(%rsp), %rax
movq 0x18(%rax), %rdi
movq 0x20(%rsp), %rax
movq 0x20(%rax), %rsi
movq 0x20(%rsp), %rax
movq 0x28(%rax), %rdx
movq 0x20(%rsp), %rax
movq 0x30(%rax), %rcx
movq 0x20(%rsp), %rax
movq 0x48(%rax), %r8
movq 0x28(%rsp), %r9
callq 0x2fe080
movl %eax, 0x14(%rsp)
cmpl $0x0, 0x14(%rsp)
jne 0x2fdf14
movq 0x20(%rsp), %rax
movq 0x18(%rax), %rdi
movq 0x20(%rsp), %rax
movq 0x40(%rax), %rsi
callq 0x80b60
movq (%rax), %rcx
movq 0x30(%rsp), %rax
movq %rcx, (%rax)
movq 0x20(%rsp), %rax
movq 0x40(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x40(%rax)
movq 0x20(%rsp), %rax
movb $0x0, 0x38(%rax)
movl $0x0, 0x44(%rsp)
jmp 0x2fdf92
jmp 0x2fdf8a
movq 0x20(%rsp), %rax
movq 0x40(%rax), %rax
movq %rax, 0x8(%rsp)
movq 0x20(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0x81370
movq %rax, %rcx
movq 0x8(%rsp), %rax
cmpq %rcx, %rax
jb 0x2fdf4d
movq 0x30(%rsp), %rax
movq $0x0, (%rax)
jmp 0x2fdf80
movq 0x20(%rsp), %rax
movq 0x18(%rax), %rdi
movq 0x20(%rsp), %rax
movq 0x40(%rax), %rsi
callq 0x80b60
movq (%rax), %rcx
movq 0x30(%rsp), %rax
movq %rcx, (%rax)
movq 0x20(%rsp), %rax
movq 0x40(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x40(%rax)
movl $0x0, 0x44(%rsp)
jmp 0x2fdf92
movl 0x14(%rsp), %eax
movl %eax, 0x44(%rsp)
movl 0x44(%rsp), %eax
addq $0x48, %rsp
retq
nopl (%rax,%rax)