// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::symbol_table<double>::add_function(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, exprtk::igeneric_function<double>&)
inline bool add_function(const std::string& function_name, generic_function_t& function)
      {
         if (!valid())
            return false;
         else if (!valid_symbol(function_name))
            return false;
         else if (symbol_exists(function_name))
            return false;
         else
         {
            switch (function.rtrn_type)
            {
               case generic_function_t::e_rtrn_scalar :
                  return (std::string::npos == function.parameter_sequence.find_first_not_of("STVZ*?|")) ?
                         local_data().generic_function_store.add(function_name,function) : false;

               case generic_function_t::e_rtrn_string :
                  return (std::string::npos == function.parameter_sequence.find_first_not_of("STVZ*?|")) ?
                         local_data().string_function_store.add(function_name,function)  : false;

               case generic_function_t::e_rtrn_overload :
                  return (std::string::npos == function.parameter_sequence.find_first_not_of("STVZ*?|:")) ?
                         local_data().overload_function_store.add(function_name,function) : false;
            }
         }

         return false;
      }

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x28(%rsp)
movq %rsi, 0x20(%rsp)
movq %rdx, 0x18(%rsp)
movq 0x28(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x232d30
testb $0x1, %al
jne 0x57bf30
movb $0x0, 0x37(%rsp)
jmp 0x57c0e8
movq 0x10(%rsp), %rdi
movq 0x20(%rsp), %rsi
movl $0x1, %edx
callq 0x233ed0
testb $0x1, %al
jne 0x57bf52
movb $0x0, 0x37(%rsp)
jmp 0x57c0e8
movq 0x10(%rsp), %rdi
movq 0x20(%rsp), %rsi
movl $0x1, %edx
callq 0x234050
testb $0x1, %al
jne 0x57bf6c
jmp 0x57bf76
movb $0x0, 0x37(%rsp)
jmp 0x57c0e8
movq 0x18(%rsp), %rax
movl 0x40(%rax), %eax
movl %eax, 0xc(%rsp)
testl %eax, %eax
je 0x57bfa5
jmp 0x57bf88
movl 0xc(%rsp), %eax
subl $0x1, %eax
je 0x57c00f
jmp 0x57bf93
movl 0xc(%rsp), %eax
subl $0x2, %eax
je 0x57c076
jmp 0x57c0dd
movq 0x18(%rsp), %rdi
addq $0x20, %rdi
leaq 0x45845(%rip), %rsi     # 0x5c17fa
xorl %eax, %eax
movl %eax, %edx
callq 0x11b650
movq %rax, %rcx
movq $-0x1, %rax
cmpq %rcx, %rax
jne 0x57bff8
movq 0x10(%rsp), %rdi
callq 0x232e60
movq %rax, %rdi
addq $0xa8, %rdi
movq 0x20(%rsp), %rsi
movq 0x18(%rsp), %rdx
xorl %ecx, %ecx
callq 0x57c100
movb %al, 0xb(%rsp)
jmp 0x57c000
xorl %eax, %eax
movb %al, 0xb(%rsp)
jmp 0x57c000
movb 0xb(%rsp), %al
andb $0x1, %al
movb %al, 0x37(%rsp)
jmp 0x57c0e8
movq 0x18(%rsp), %rdi
addq $0x20, %rdi
leaq 0x457db(%rip), %rsi     # 0x5c17fa
xorl %eax, %eax
movl %eax, %edx
callq 0x11b650
movq %rax, %rcx
movq $-0x1, %rax
cmpq %rcx, %rax
jne 0x57c062
movq 0x10(%rsp), %rdi
callq 0x232e60
movq %rax, %rdi
addq $0xe0, %rdi
movq 0x20(%rsp), %rsi
movq 0x18(%rsp), %rdx
xorl %ecx, %ecx
callq 0x57c100
movb %al, 0xa(%rsp)
jmp 0x57c06a
xorl %eax, %eax
movb %al, 0xa(%rsp)
jmp 0x57c06a
movb 0xa(%rsp), %al
andb $0x1, %al
movb %al, 0x37(%rsp)
jmp 0x57c0e8
movq 0x18(%rsp), %rdi
addq $0x20, %rdi
leaq 0x4577c(%rip), %rsi     # 0x5c1802
xorl %eax, %eax
movl %eax, %edx
callq 0x11b650
movq %rax, %rcx
movq $-0x1, %rax
cmpq %rcx, %rax
jne 0x57c0c9
movq 0x10(%rsp), %rdi
callq 0x232e60
movq %rax, %rdi
addq $0x118, %rdi            # imm = 0x118
movq 0x20(%rsp), %rsi
movq 0x18(%rsp), %rdx
xorl %ecx, %ecx
callq 0x57c100
movb %al, 0x9(%rsp)
jmp 0x57c0d1
xorl %eax, %eax
movb %al, 0x9(%rsp)
jmp 0x57c0d1
movb 0x9(%rsp), %al
andb $0x1, %al
movb %al, 0x37(%rsp)
jmp 0x57c0e8
jmp 0x57c0df
jmp 0x57c0e1
jmp 0x57c0e3
movb $0x0, 0x37(%rsp)
movb 0x37(%rsp), %al
andb $0x1, %al
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)