// File: /workspace/github_cpp_makefile_star2_O3/aalto-speech[P]ftk/util/conf.cc
// Function: conf::Config::operator()(unsigned char, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
Config&
Config::operator()(unsigned char short_name, std::string long_name,
                   std::string type, std::string default_value,
                   std::string help)
{
    // Initialize new option
    Option o;
    o.short_name = short_name;
    o.long_name = long_name;
    o.value = default_value;
    o.required = false;
    o.needs_argument = false;
    o.help = help;

    // Remove the possible equal sign part from the long name used as
    // a map key.
    std::string long_name_map_key(long_name);
    int equal_pos = long_name_map_key.find('=');
    if (equal_pos >= 0)
        long_name_map_key.erase(equal_pos);

    // Parse the type string
    std::vector<std::string> types = str::split(type, " \t", true);
    for (int i = 0; i < (int)types.size(); i++) {
        if (types[i] == "arg")
            o.needs_argument = true;
        else if (types[i] == "must")
            o.required = true;
        else {
            fprintf(stderr, "invalid option type %s for option -%c --%s\n",
                    types[i].c_str(), short_name, long_name.c_str());
            abort();
        }
    }

    // Add structure to configuration
    if (short_name != 0) {
        if (short_map.find(short_name) != short_map.end()) {
            fprintf(stderr, "trying to add option -%c twice\n", short_name);
            exit(1);
        }
        short_map[short_name] = options.size();
        o.name.append("-");
        o.name.append(1, short_name);
    }
    if (long_name_map_key != "") {
        if (long_map.find(long_name_map_key) != long_map.end()) {
            fprintf(stderr, "trying to add option --%s twice\n",
                    long_name_map_key.c_str());
            exit(1);
        }
        long_map[long_name_map_key] = options.size();
        if ((int)long_name.length() > longest_name_length)
            longest_name_length = long_name.length();
        if (o.name.length() > 0)
            o.name.append(" --");
        else
            o.name.append("--");
        o.name.append(long_name_map_key);
    }
    options.push_back(o);

    return *this;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xd8, %rsp
movq %r9, %r12
movq %r8, %r13
movq %rcx, %r15
movq %rdx, %r14
movq %rdi, %rbx
movb %sil, -0x29(%rbp)
leaq -0xf8(%rbp), %rdi
leaq -0xe8(%rbp), %rcx
movq %rcx, -0x10(%rcx)
xorl %eax, %eax
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq -0xc8(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
movw $0x0, 0x10(%rcx)
movb %al, 0x12(%rcx)
leaq -0xa0(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq -0x80(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
movb %sil, -0x80(%rcx)
movq %rdx, %rsi
callq 0x41c0
leaq -0xd8(%rbp), %rdi
movq %r13, %rsi
callq 0x41c0
leaq -0xb0(%rbp), %rdi
movw $0x0, -0x8(%rdi)
movq %r12, %rsi
callq 0x41c0
leaq -0x40(%rbp), %rax
movq %rax, -0x10(%rax)
movq (%r14), %rsi
movq 0x8(%r14), %rdx
addq %rsi, %rdx
leaq -0x50(%rbp), %rdi
callq 0x5f0e
leaq -0x50(%rbp), %rdi
movl $0x3d, %esi
xorl %edx, %edx
callq 0x4480
testl %eax, %eax
js 0x6bef
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq -0x48(%rbp), %rcx
cmpq %rax, %rcx
jb 0x6e78
movq %rax, -0x48(%rbp)
movq -0x50(%rbp), %rcx
movb $0x0, (%rcx,%rax)
movq %r14, -0x58(%rbp)
leaq 0x1f69e(%rip), %rdx     # 0x26298
leaq -0x70(%rbp), %rdi
movq %r15, %rsi
movl $0x1, %ecx
xorl %r8d, %r8d
callq 0x7b51
movq -0x70(%rbp), %rdi
movq -0x68(%rbp), %rax
subq %rdi, %rax
shrq $0x5, %rax
testl %eax, %eax
jle 0x6c88
xorl %r14d, %r14d
leaq 0x1f670(%rip), %r12     # 0x2629b
leaq 0x1f66d(%rip), %r13     # 0x2629f
xorl %r15d, %r15d
addq %r14, %rdi
movq %r12, %rsi
callq 0x40f0
testl %eax, %eax
je 0x6c64
movq -0x70(%rbp), %rdi
addq %r14, %rdi
movq %r13, %rsi
callq 0x40f0
testl %eax, %eax
jne 0x6e5b
movb $0x1, -0xb8(%rbp)
jmp 0x6c6b
movb $0x1, -0xb7(%rbp)
incq %r15
movq -0x70(%rbp), %rdi
movq -0x68(%rbp), %rax
subq %rdi, %rax
shrq $0x5, %rax
cltq
addq $0x20, %r14
cmpq %rax, %r15
jl 0x6c35
leaq -0x90(%rbp), %r15
movb -0x29(%rbp), %al
testb %al, %al
je 0x6d1e
movq 0x48(%rbx), %rcx
testq %rcx, %rcx
je 0x6ccf
leaq 0x40(%rbx), %rsi
movq %rsi, %rdx
xorl %edi, %edi
cmpb %al, 0x20(%rcx)
setb %dil
cmovaeq %rcx, %rdx
movq 0x10(%rcx,%rdi,8), %rcx
testq %rcx, %rcx
jne 0x6caa
cmpq %rsi, %rdx
je 0x6ccf
cmpb 0x20(%rdx), %al
jae 0x6e90
leaq 0x38(%rbx), %rdi
movq 0x20(%rbx), %r12
movq 0x28(%rbx), %r14
leaq -0x29(%rbp), %rsi
callq 0x7d44
subq %r12, %r14
shrq $0x4, %r14
imull $0x38e38e39, %r14d, %ecx # imm = 0x38E38E39
movl %ecx, (%rax)
leaq 0x1f644(%rip), %rsi     # 0x2633f
movq %r15, %rdi
callq 0x46b0
movsbl -0x29(%rbp), %r8d
movq -0x88(%rbp), %rsi
movl $0x1, %ecx
movq %r15, %rdi
xorl %edx, %edx
callq 0x4690
leaq 0x1f872(%rip), %rsi     # 0x26597
leaq -0x50(%rbp), %rdi
callq 0x40f0
testl %eax, %eax
je 0x6dbe
leaq 0x68(%rbx), %r12
leaq -0x50(%rbp), %rsi
movq %r12, %rdi
callq 0x884a
leaq 0x70(%rbx), %rcx
cmpq %rcx, %rax
jne 0x6e6f
movq 0x20(%rbx), %r13
movq 0x28(%rbx), %r14
leaq -0x50(%rbp), %rsi
movq %r12, %rdi
callq 0x7dac
subq %r13, %r14
shrq $0x4, %r14
imull $0x38e38e39, %r14d, %ecx # imm = 0x38E38E39
movl %ecx, (%rax)
movq -0x58(%rbp), %rax
movl 0x8(%rax), %eax
cmpl %eax, 0xb0(%rbx)
jge 0x6d8c
movl %eax, 0xb0(%rbx)
cmpq $0x0, -0x88(%rbp)
leaq 0x1f577(%rip), %rax     # 0x26312
leaq 0x1f56f(%rip), %rsi     # 0x26311
cmoveq %rax, %rsi
movq %r15, %rdi
callq 0x46b0
movq -0x50(%rbp), %rsi
movq -0x48(%rbp), %rdx
movq %r15, %rdi
callq 0x4100
leaq 0x20(%rbx), %rdi
leaq -0x100(%rbp), %rsi
callq 0x7e2c
leaq -0x70(%rbp), %rdi
callq 0x5d4e
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x6de9
callq 0x4350
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
leaq -0xe8(%rbp), %r14
je 0x6e05
callq 0x4350
movq -0xb0(%rbp), %rdi
leaq -0xa0(%rbp), %rax
cmpq %rax, %rdi
je 0x6e1d
callq 0x4350
movq -0xd8(%rbp), %rdi
leaq -0xc8(%rbp), %rax
cmpq %rax, %rdi
je 0x6e35
callq 0x4350
movq -0xf8(%rbp), %rdi
cmpq %r14, %rdi
je 0x6e46
callq 0x4350
movq %rbx, %rax
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq -0x70(%rbp), %rdi
leaq -0x29(%rbp), %rdx
movq %r15, %rsi
movq -0x58(%rbp), %rcx
callq 0x479a
leaq -0x50(%rbp), %rdi
callq 0x4801
leaq 0x1f5a4(%rip), %rdi     # 0x26423
leaq 0x1f589(%rip), %rsi     # 0x2640f
movq %rax, %rdx
xorl %eax, %eax
callq 0x4530
movzbl %al, %edi
callq 0x47d6
jmp 0x6e9c
jmp 0x6ea8
movq %rax, %rbx
jmp 0x6eb4
jmp 0x6ea3
movq %rax, %rbx
jmp 0x6ec6
movq %rax, %rbx
leaq -0x70(%rbp), %rdi
callq 0x5d4e
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x6ec6
callq 0x4350
leaq -0x100(%rbp), %rdi
callq 0x7e6a
movq %rbx, %rdi
callq 0x4650