// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/extended/stream_evaluator.c
// Function: set_actuals_and_sort_them
static int set_actuals_and_sort_them(GT_UNUSED void *key, void *value,
                                     void *data, GT_UNUSED GtError *err)
{
  GtStreamEvaluator *se = (GtStreamEvaluator*) data;
  Slot *s = (Slot*) value;

  gt_error_check(err);
  gt_assert(key && value && data);

  /* set actual genes */
  gt_evaluator_add_actual(se->mRNA_gene_evaluator,
                          gt_array_size(s->genes_forward));
  gt_evaluator_add_actual(se->mRNA_gene_evaluator,
                          gt_array_size(s->genes_reverse));
  gt_evaluator_add_actual(se->CDS_gene_evaluator,
                          gt_array_size(s->genes_forward));
  gt_evaluator_add_actual(se->CDS_gene_evaluator,
                          gt_array_size(s->genes_reverse));

  /* set actual mRNAs */
  gt_evaluator_add_actual(se->mRNA_mRNA_evaluator,
                          gt_array_size(s->mRNAs_forward));
  gt_evaluator_add_actual(se->mRNA_mRNA_evaluator,
                          gt_array_size(s->mRNAs_reverse));
  gt_evaluator_add_actual(se->CDS_mRNA_evaluator,
                          gt_array_size(s->mRNAs_forward));
  gt_evaluator_add_actual(se->CDS_mRNA_evaluator,
                          gt_array_size(s->mRNAs_reverse));

  /* set actual LTRs */
  gt_evaluator_add_actual(se->LTR_evaluator, gt_array_size(s->LTRs));

  /* set actual exons (before uniq!) */
  gt_transcript_evaluators_add_actuals(se->mRNA_exon_evaluators,
                                       s->mRNA_exons_forward);
  gt_transcript_evaluators_add_actuals(se->mRNA_exon_evaluators,
                                       s->mRNA_exons_reverse);
  gt_transcript_evaluators_add_actuals(se->CDS_exon_evaluators,
                                       s->CDS_exons_forward);
  gt_transcript_evaluators_add_actuals(se->CDS_exon_evaluators,
                                       s->CDS_exons_reverse);

  /* sort genes */
  gt_genome_nodes_sort(s->genes_forward);
  gt_genome_nodes_sort(s->genes_reverse);

  /* sort mRNAs */
  gt_genome_nodes_sort(s->mRNAs_forward);
  gt_genome_nodes_sort(s->mRNAs_reverse);

  /* sort LTRs */
  gt_genome_nodes_sort(s->LTRs);

  /* sort exons */
  gt_transcript_exons_sort(s->mRNA_exons_forward);
  gt_transcript_exons_sort(s->mRNA_exons_reverse);
  gt_transcript_exons_sort(s->CDS_exons_forward);
  gt_transcript_exons_sort(s->CDS_exons_reverse);

  /* determine true exons */
  s->mRNA_counts_forward =
    gt_transcript_exons_uniq_in_place_count(s->mRNA_exons_forward);
  s->mRNA_counts_reverse =
    gt_transcript_exons_uniq_in_place_count(s->mRNA_exons_reverse);
  s->CDS_counts_forward =
    gt_transcript_exons_uniq_in_place_count(s->CDS_exons_forward);
  s->CDS_counts_reverse =
    gt_transcript_exons_uniq_in_place_count(s->CDS_exons_reverse);

  /* set actual exons for the collapsed case (after uniq!) */
  gt_transcript_evaluators_add_actuals(se->mRNA_exon_evaluators_collapsed,
                                       s->mRNA_exons_forward);
  gt_transcript_evaluators_add_actuals(se->mRNA_exon_evaluators_collapsed,
                                       s->mRNA_exons_reverse);
  gt_transcript_evaluators_add_actuals(se->CDS_exon_evaluators_collapsed,
                                       s->CDS_exons_forward);
  gt_transcript_evaluators_add_actuals(se->CDS_exon_evaluators_collapsed,
                                       s->CDS_exons_reverse);

  /* make sure that the genes are sorted */
  gt_assert(gt_genome_nodes_are_sorted(s->genes_forward));
  gt_assert(gt_genome_nodes_are_sorted(s->genes_reverse));

  /* make sure that the mRNAs are sorted */
  gt_assert(gt_genome_nodes_are_sorted(s->mRNAs_forward));
  gt_assert(gt_genome_nodes_are_sorted(s->mRNAs_reverse));

  /* make sure that the LTRs are sorted */
  gt_assert(gt_genome_nodes_are_sorted(s->LTRs));

  /* make sure that the exons are sorted */
  gt_assert(gt_transcript_exons_are_sorted(s->mRNA_exons_forward));
  gt_assert(gt_transcript_exons_are_sorted(s->mRNA_exons_reverse));
  gt_assert(gt_transcript_exons_are_sorted(s->CDS_exons_forward));
  gt_assert(gt_transcript_exons_are_sorted(s->CDS_exons_reverse));

  /* init true bittabs */
  s->true_mRNA_genes_forward = gt_array_size(s->genes_forward)
                               ? gt_bittab_new(gt_array_size(s->genes_forward))
                               : NULL;
  s->true_mRNA_genes_reverse = gt_array_size(s->genes_reverse)
                               ? gt_bittab_new(gt_array_size(s->genes_reverse))
                               : NULL;
  s->true_CDS_genes_forward = gt_array_size(s->genes_forward)
                              ? gt_bittab_new(gt_array_size(s->genes_forward))
                              : NULL;
  s->true_CDS_genes_reverse = gt_array_size(s->genes_reverse)
                              ? gt_bittab_new(gt_array_size(s->genes_reverse))
                              : NULL;
  s->true_mRNA_mRNAs_forward = gt_array_size(s->mRNAs_forward)
                               ? gt_bittab_new(gt_array_size(s->mRNAs_forward))
                               : NULL;
  s->true_mRNA_mRNAs_reverse = gt_array_size(s->mRNAs_reverse)
                               ? gt_bittab_new(gt_array_size(s->mRNAs_reverse))
                               : NULL;
  s->true_CDS_mRNAs_forward = gt_array_size(s->mRNAs_forward)
                              ? gt_bittab_new(gt_array_size(s->mRNAs_forward))
                              : NULL;
  s->true_CDS_mRNAs_reverse = gt_array_size(s->mRNAs_reverse)
                              ? gt_bittab_new(gt_array_size(s->mRNAs_reverse))
                              : NULL;
  s->true_LTRs          = gt_array_size(s->LTRs)
                          ? gt_bittab_new(gt_array_size(s->LTRs))
                          : NULL;

  /* init overlap bittabs */
  s->overlapped_genes_forward = gt_array_size(s->genes_forward)
                                ? gt_bittab_new(gt_array_size(s->genes_forward))
                                : NULL;
  s->overlapped_genes_reverse = gt_array_size(s->genes_reverse)
                                ? gt_bittab_new(gt_array_size(s->genes_reverse))
                                : NULL;
  s->overlapped_mRNAs_forward = gt_array_size(s->mRNAs_forward)
                                ? gt_bittab_new(gt_array_size(s->mRNAs_forward))
                                : NULL;
  s->overlapped_mRNAs_reverse = gt_array_size(s->mRNAs_reverse)
                                ? gt_bittab_new(gt_array_size(s->mRNAs_reverse))
                                : NULL;
  s->overlapped_LTRs          = gt_array_size(s->LTRs)
                                ? gt_bittab_new(gt_array_size(s->LTRs))
                                : NULL;

  /* init bittabs (for collapsed exons) */
  s->mRNA_exon_bittabs_forward =
    gt_transcript_exons_create_bittabs(s->mRNA_exons_forward);
  s->mRNA_exon_bittabs_reverse =
    gt_transcript_exons_create_bittabs(s->mRNA_exons_reverse);
  s->CDS_exon_bittabs_forward =
    gt_transcript_exons_create_bittabs(s->CDS_exons_forward);
  s->CDS_exon_bittabs_reverse =
    gt_transcript_exons_create_bittabs(s->CDS_exons_reverse);

  return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdx, %r14
movq %rsi, %rbx
movq %rdi, %r15
testq %rcx, %rcx
je 0xaadaf
movq %rcx, %rdi
callq 0x3566a
testb %al, %al
jne 0xab2e4
testq %r15, %r15
je 0xab2b2
testq %rbx, %rbx
je 0xab2b2
testq %r14, %r14
je 0xab2b2
movq 0x28(%r14), %r15
movq (%rbx), %rdi
callq 0x6ecda
movq %r15, %rdi
movq %rax, %rsi
callq 0xdaa9e
movq 0x28(%r14), %r15
movq 0x8(%rbx), %rdi
callq 0x6ecda
movq %r15, %rdi
movq %rax, %rsi
callq 0xdaa9e
movq 0x30(%r14), %r15
movq (%rbx), %rdi
callq 0x6ecda
movq %r15, %rdi
movq %rax, %rsi
callq 0xdaa9e
movq 0x30(%r14), %r15
movq 0x8(%rbx), %rdi
callq 0x6ecda
movq %r15, %rdi
movq %rax, %rsi
callq 0xdaa9e
movq 0x38(%r14), %r15
movq 0x10(%rbx), %rdi
callq 0x6ecda
movq %r15, %rdi
movq %rax, %rsi
callq 0xdaa9e
movq 0x38(%r14), %r15
movq 0x18(%rbx), %rdi
callq 0x6ecda
movq %r15, %rdi
movq %rax, %rsi
callq 0xdaa9e
movq 0x40(%r14), %r15
movq 0x10(%rbx), %rdi
callq 0x6ecda
movq %r15, %rdi
movq %rax, %rsi
callq 0xdaa9e
movq 0x40(%r14), %r15
movq 0x18(%rbx), %rdi
callq 0x6ecda
movq %r15, %rdi
movq %rax, %rsi
callq 0xdaa9e
movq 0x48(%r14), %r15
movq 0x20(%rbx), %rdi
callq 0x6ecda
movq %r15, %rdi
movq %rax, %rsi
callq 0xdaa9e
movq 0x50(%r14), %rdi
movq 0x28(%rbx), %rsi
callq 0xad4fa
movq 0x50(%r14), %rdi
movq 0x30(%rbx), %rsi
callq 0xad4fa
movq 0x60(%r14), %rdi
movq 0x38(%rbx), %rsi
callq 0xad4fa
movq 0x60(%r14), %rdi
movq 0x40(%rbx), %rsi
callq 0xad4fa
movq (%rbx), %rdi
callq 0x4216d
movq 0x8(%rbx), %rdi
callq 0x4216d
movq 0x10(%rbx), %rdi
callq 0x4216d
movq 0x18(%rbx), %rdi
callq 0x4216d
movq 0x20(%rbx), %rdi
callq 0x4216d
movq 0x28(%rbx), %rdi
callq 0xad6bb
movq 0x30(%rbx), %rdi
callq 0xad6bb
movq 0x38(%rbx), %rdi
callq 0xad6bb
movq 0x40(%rbx), %rdi
callq 0xad6bb
movq 0x28(%rbx), %rdi
callq 0xad6f6
movq %rax, 0x48(%rbx)
movq 0x30(%rbx), %rdi
callq 0xad6f6
movq %rax, 0x50(%rbx)
movq 0x38(%rbx), %rdi
callq 0xad6f6
movq %rax, 0x58(%rbx)
movq 0x40(%rbx), %rdi
callq 0xad6f6
movq %rax, 0x60(%rbx)
movq 0x58(%r14), %rdi
movq 0x28(%rbx), %rsi
callq 0xad4fa
movq 0x58(%r14), %rdi
movq 0x30(%rbx), %rsi
callq 0xad4fa
movq 0x68(%r14), %rdi
movq 0x38(%rbx), %rsi
callq 0xad4fa
movq 0x68(%r14), %rdi
movq 0x40(%rbx), %rsi
callq 0xad4fa
movq (%rbx), %rdi
callq 0x42317
testb %al, %al
je 0xab2b7
movq 0x8(%rbx), %rdi
callq 0x42317
testb %al, %al
je 0xab2bc
movq 0x10(%rbx), %rdi
callq 0x42317
testb %al, %al
je 0xab2c1
movq 0x18(%rbx), %rdi
callq 0x42317
testb %al, %al
je 0xab2c6
movq 0x20(%rbx), %rdi
callq 0x42317
testb %al, %al
je 0xab2cb
movq 0x28(%rbx), %rdi
callq 0xad77d
testb %al, %al
je 0xab2d0
movq 0x30(%rbx), %rdi
callq 0xad77d
testb %al, %al
je 0xab2d5
movq 0x38(%rbx), %rdi
callq 0xad77d
testb %al, %al
je 0xab2da
movq 0x40(%rbx), %rdi
callq 0xad77d
testb %al, %al
je 0xab2df
movq (%rbx), %rdi
callq 0x6ecda
testq %rax, %rax
je 0xab043
movq (%rbx), %rdi
callq 0x6ecda
movq %rax, %rdi
callq 0x70724
jmp 0xab045
xorl %eax, %eax
movq %rax, 0xd8(%rbx)
movq 0x8(%rbx), %rdi
callq 0x6ecda
testq %rax, %rax
je 0xab06d
movq 0x8(%rbx), %rdi
callq 0x6ecda
movq %rax, %rdi
callq 0x70724
jmp 0xab06f
xorl %eax, %eax
movq %rax, 0xe0(%rbx)
movq (%rbx), %rdi
callq 0x6ecda
testq %rax, %rax
je 0xab095
movq (%rbx), %rdi
callq 0x6ecda
movq %rax, %rdi
callq 0x70724
jmp 0xab097
xorl %eax, %eax
movq %rax, 0xe8(%rbx)
movq 0x8(%rbx), %rdi
callq 0x6ecda
testq %rax, %rax
je 0xab0bf
movq 0x8(%rbx), %rdi
callq 0x6ecda
movq %rax, %rdi
callq 0x70724
jmp 0xab0c1
xorl %eax, %eax
movq %rax, 0xf0(%rbx)
movq 0x10(%rbx), %rdi
callq 0x6ecda
testq %rax, %rax
je 0xab0e9
movq 0x10(%rbx), %rdi
callq 0x6ecda
movq %rax, %rdi
callq 0x70724
jmp 0xab0eb
xorl %eax, %eax
movq %rax, 0xf8(%rbx)
movq 0x18(%rbx), %rdi
callq 0x6ecda
testq %rax, %rax
je 0xab113
movq 0x18(%rbx), %rdi
callq 0x6ecda
movq %rax, %rdi
callq 0x70724
jmp 0xab115
xorl %eax, %eax
movq %rax, 0x100(%rbx)
movq 0x10(%rbx), %rdi
callq 0x6ecda
testq %rax, %rax
je 0xab13d
movq 0x10(%rbx), %rdi
callq 0x6ecda
movq %rax, %rdi
callq 0x70724
jmp 0xab13f
xorl %eax, %eax
movq %rax, 0x108(%rbx)
movq 0x18(%rbx), %rdi
callq 0x6ecda
testq %rax, %rax
je 0xab167
movq 0x18(%rbx), %rdi
callq 0x6ecda
movq %rax, %rdi
callq 0x70724
jmp 0xab169
xorl %eax, %eax
movq %rax, 0x110(%rbx)
movq 0x20(%rbx), %rdi
callq 0x6ecda
testq %rax, %rax
je 0xab191
movq 0x20(%rbx), %rdi
callq 0x6ecda
movq %rax, %rdi
callq 0x70724
jmp 0xab193
xorl %eax, %eax
movq %rax, 0x118(%rbx)
movq (%rbx), %rdi
callq 0x6ecda
testq %rax, %rax
je 0xab1b9
movq (%rbx), %rdi
callq 0x6ecda
movq %rax, %rdi
callq 0x70724
jmp 0xab1bb
xorl %eax, %eax
movq %rax, 0x120(%rbx)
movq 0x8(%rbx), %rdi
callq 0x6ecda
testq %rax, %rax
je 0xab1e3
movq 0x8(%rbx), %rdi
callq 0x6ecda
movq %rax, %rdi
callq 0x70724
jmp 0xab1e5
xorl %eax, %eax
movq %rax, 0x128(%rbx)
movq 0x10(%rbx), %rdi
callq 0x6ecda
testq %rax, %rax
je 0xab20d
movq 0x10(%rbx), %rdi
callq 0x6ecda
movq %rax, %rdi
callq 0x70724
jmp 0xab20f
xorl %eax, %eax
movq %rax, 0x130(%rbx)
movq 0x18(%rbx), %rdi
callq 0x6ecda
testq %rax, %rax
je 0xab237
movq 0x18(%rbx), %rdi
callq 0x6ecda
movq %rax, %rdi
callq 0x70724
jmp 0xab239
xorl %eax, %eax
movq %rax, 0x138(%rbx)
movq 0x20(%rbx), %rdi
callq 0x6ecda
testq %rax, %rax
je 0xab261
movq 0x20(%rbx), %rdi
callq 0x6ecda
movq %rax, %rdi
callq 0x70724
jmp 0xab263
xorl %eax, %eax
movq %rax, 0x140(%rbx)
movq 0x28(%rbx), %rdi
callq 0xad7cc
movq %rax, 0x148(%rbx)
movq 0x30(%rbx), %rdi
callq 0xad7cc
movq %rax, 0x150(%rbx)
movq 0x38(%rbx), %rdi
callq 0xad7cc
movq %rax, 0x158(%rbx)
movq 0x40(%rbx), %rdi
callq 0xad7cc
movq %rax, 0x160(%rbx)
xorl %eax, %eax
popq %rbx
popq %r14
popq %r15
retq
callq 0x24be5
callq 0x24c1e
callq 0x24c57
callq 0x24c90
callq 0x24cc9
callq 0x24d02
callq 0x24d3b
callq 0x24d74
callq 0x24dad
callq 0x24de6
callq 0x24bac