// File: ArashPartow[P]exprtk-extras/exprtk_symtab_functions.cpp
// Function: void symbol_table_function_names<double>()
void symbol_table_function_names()
{
   typedef exprtk::symbol_table<T> symbol_table_t;

   symbol_table_t symbol_table;

   myfunc<T> mf;

   symbol_table.add_function("f1",[](T v0) -> T { return v0;});
   symbol_table.add_function("f2",[](T v0, T v1) -> T{ return v0 / v1;});

   symbol_table.add_function("myfunc"   , mf         );
   symbol_table.add_function("otherfunc", myotherfunc);

   for (const auto& func : symbol_table.get_function_list())
   {
      printf("function: %s\n",func.c_str());
   }
}

// Assembly:
subq $0x138, %rsp            # imm = 0x138
leaq 0x130(%rsp), %rdi
movl $0x1, %esi
callq 0xa800
leaq 0x108(%rsp), %rdi
callq 0xa840
jmp 0xa168
leaq 0xd7(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x3280
movq 0x18(%rsp), %rdx
leaq 0xb093(%rip), %rsi      # 0x15219
leaq 0xd8(%rsp), %rdi
callq 0xa080
jmp 0xa195
leaq 0xd6(%rsp), %rdi
callq 0xa9d0
movq %rax, %rdx
leaq 0x130(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
callq 0xa8a0
jmp 0xa1bc
leaq 0xd8(%rsp), %rdi
callq 0x30f0
leaq 0xd7(%rsp), %rdi
callq 0x31c0
leaq 0xaf(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x3280
movq 0x10(%rsp), %rdx
leaq 0xb028(%rip), %rsi      # 0x1521c
leaq 0xb0(%rsp), %rdi
callq 0xa080
jmp 0xa203
leaq 0xae(%rsp), %rdi
callq 0xab10
movq %rax, %rdx
leaq 0x130(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
callq 0xa9e0
jmp 0xa22a
leaq 0xb0(%rsp), %rdi
callq 0x30f0
leaq 0xaf(%rsp), %rdi
callq 0x31c0
leaq 0x87(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0x3280
movq 0x8(%rsp), %rdx
leaq 0xafbd(%rip), %rsi      # 0x1521f
leaq 0x88(%rsp), %rdi
callq 0xa080
jmp 0xa271
leaq 0x130(%rsp), %rdi
leaq 0x88(%rsp), %rsi
leaq 0x108(%rsp), %rdx
callq 0xab20
jmp 0xa290
leaq 0x88(%rsp), %rdi
callq 0x30f0
leaq 0x87(%rsp), %rdi
callq 0x31c0
leaq 0x5f(%rsp), %rdi
movq %rdi, (%rsp)
callq 0x3280
movq (%rsp), %rdx
leaq 0xaf63(%rip), %rsi      # 0x15226
leaq 0x60(%rsp), %rdi
callq 0xa080
jmp 0xa2cf
leaq 0xa1a(%rip), %rdx       # 0xacf0
leaq 0x130(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0xabc0
jmp 0xa2ea
leaq 0x60(%rsp), %rdi
callq 0x30f0
leaq 0x5f(%rsp), %rdi
callq 0x31c0
leaq 0x38(%rsp), %rdi
leaq 0x130(%rsp), %rsi
callq 0xad20
jmp 0xa312
leaq 0x38(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0x50(%rsp), %rdi
callq 0xadb0
movq %rax, 0x30(%rsp)
movq 0x50(%rsp), %rdi
callq 0xade0
movq %rax, 0x28(%rsp)
leaq 0x30(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0xae10
testb $0x1, %al
jne 0xa4ad
leaq 0x38(%rsp), %rdi
callq 0xae80
jmp 0xa50a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x100(%rsp)
movl %eax, 0xfc(%rsp)
jmp 0xa539
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x100(%rsp)
movl %eax, 0xfc(%rsp)
jmp 0xa3b0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x100(%rsp)
movl %eax, 0xfc(%rsp)
leaq 0xd8(%rsp), %rdi
callq 0x30f0
leaq 0xd7(%rsp), %rdi
callq 0x31c0
jmp 0xa52c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x100(%rsp)
movl %eax, 0xfc(%rsp)
jmp 0xa3f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x100(%rsp)
movl %eax, 0xfc(%rsp)
leaq 0xb0(%rsp), %rdi
callq 0x30f0
leaq 0xaf(%rsp), %rdi
callq 0x31c0
jmp 0xa52c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x100(%rsp)
movl %eax, 0xfc(%rsp)
jmp 0xa442
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x100(%rsp)
movl %eax, 0xfc(%rsp)
leaq 0x88(%rsp), %rdi
callq 0x30f0
leaq 0x87(%rsp), %rdi
callq 0x31c0
jmp 0xa52c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x100(%rsp)
movl %eax, 0xfc(%rsp)
jmp 0xa488
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x100(%rsp)
movl %eax, 0xfc(%rsp)
leaq 0x60(%rsp), %rdi
callq 0x30f0
leaq 0x5f(%rsp), %rdi
callq 0x31c0
jmp 0xa52c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x100(%rsp)
movl %eax, 0xfc(%rsp)
jmp 0xa52c
leaq 0x30(%rsp), %rdi
callq 0xae50
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rdi
callq 0x30a0
movq %rax, %rsi
leaq 0xad60(%rip), %rdi      # 0x15230
xorl %eax, %eax
callq 0x3040
jmp 0xa4d9
jmp 0xa4db
leaq 0x30(%rsp), %rdi
callq 0xae60
jmp 0xa33a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x100(%rsp)
movl %eax, 0xfc(%rsp)
leaq 0x38(%rsp), %rdi
callq 0xae80
jmp 0xa52c
leaq 0x108(%rsp), %rdi
callq 0xaee0
leaq 0x130(%rsp), %rdi
callq 0xaef0
addq $0x138, %rsp            # imm = 0x138
retq
leaq 0x108(%rsp), %rdi
callq 0xaee0
leaq 0x130(%rsp), %rdi
callq 0xaef0
movq 0x100(%rsp), %rdi
callq 0x3270
nopw %cs:(%rax,%rax)
nopl (%rax)