// File: jaudoux[P]countTags/src/optionparser.h
// Function: option::PrintUsageImplementation::LinePartIterator::next()
bool next()
    {
      if (ptr == 0)
        return false;

      if (col == -1)
      {
        col = 0;
        update_length();
        return true;
      }

      ptr += len;
      while (true)
      {
        switch (*ptr)
        {
          case '\v':
            upmax(max_line_in_block, ++line_in_block);
            ++ptr;
            break;
          case '\t':
            if (!hit_target_line) // if previous column did not have the targetline
            { // then "insert" a 0-length part
              update_length();
              hit_target_line = true;
              return true;
            }

            hit_target_line = false;
            line_in_block = 0;
            ++col;
            ++ptr;
            break;
          case 0:
          case '\n':
            if (!hit_target_line) // if previous column did not have the targetline
            { // then "insert" a 0-length part
              update_length();
              hit_target_line = true;
              return true;
            }

            if (++target_line_in_block > max_line_in_block)
            {
              update_length();
              return false;
            }

            hit_target_line = false;
            line_in_block = 0;
            col = 0;
            ptr = rowstart;
            continue;
          default:
            ++ptr;
            continue;
        } // switch

        if (line_in_block == target_line_in_block)
        {
          update_length();
          hit_target_line = true;
          return true;
        }
      } // while
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x18(%rbp)
cmpq $0x0, 0x18(%rax)
jne 0x8b34
movb $0x0, -0x1(%rbp)
jmp 0x8cb7
movq -0x18(%rbp), %rax
cmpl $-0x1, 0x20(%rax)
jne 0x8b57
movq -0x18(%rbp), %rdi
movl $0x0, 0x20(%rdi)
callq 0x9200
movb $0x1, -0x1(%rbp)
jmp 0x8cb7
movq -0x18(%rbp), %rax
movl 0x24(%rax), %edx
movq 0x18(%rax), %rcx
movslq %edx, %rdx
addq %rdx, %rcx
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movsbl (%rax), %eax
movl %eax, %ecx
movq %rcx, -0x20(%rbp)
subl $0xb, %eax
ja 0x8c7a
movq -0x20(%rbp), %rax
leaq 0x65b3(%rip), %rcx      # 0xf144
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x18(%rbp), %rax
movq %rax, %rdi
addq $0x2c, %rdi
movl 0x30(%rax), %esi
addl $0x1, %esi
movl %esi, 0x30(%rax)
callq 0x8cf0
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x18(%rax)
jmp 0x8c8f
movq -0x18(%rbp), %rax
testb $0x1, 0x38(%rax)
jne 0x8bec
movq -0x18(%rbp), %rdi
callq 0x9200
movq -0x18(%rbp), %rax
movb $0x1, 0x38(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x8cb7
movq -0x18(%rbp), %rax
movb $0x0, 0x38(%rax)
movl $0x0, 0x30(%rax)
movl 0x20(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x20(%rax)
movq 0x18(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x18(%rax)
jmp 0x8c8f
movq -0x18(%rbp), %rax
testb $0x1, 0x38(%rax)
jne 0x8c36
movq -0x18(%rbp), %rdi
callq 0x9200
movq -0x18(%rbp), %rax
movb $0x1, 0x38(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x8cb7
movq -0x18(%rbp), %rcx
movl 0x34(%rcx), %eax
addl $0x1, %eax
movl %eax, 0x34(%rcx)
cmpl 0x2c(%rcx), %eax
jle 0x8c57
movq -0x18(%rbp), %rdi
callq 0x9200
movb $0x0, -0x1(%rbp)
jmp 0x8cb7
movq -0x18(%rbp), %rax
movb $0x0, 0x38(%rax)
movl $0x0, 0x30(%rax)
movl $0x0, 0x20(%rax)
movq 0x10(%rax), %rcx
movq %rcx, 0x18(%rax)
jmp 0x8b6c
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x18(%rax)
jmp 0x8b6c
movq -0x18(%rbp), %rcx
movl 0x30(%rcx), %eax
cmpl 0x34(%rcx), %eax
jne 0x8cb2
movq -0x18(%rbp), %rdi
callq 0x9200
movq -0x18(%rbp), %rax
movb $0x1, 0x38(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x8cb7
jmp 0x8b6c
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)