// File: /workspace/github_cpp_makefile_star2_O1/salleaffaire[P]MXFParser/./dictionary.hpp
// Function: Dictionary<16>::add(Signature<16>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void add(const Signature<T> x, std::string name) {
      DictionaryNode *current_node;

      // Adding the root
      auto it = mRootNodes.find(x[0]);
      if (it == mRootNodes.end()) {
         current_node = new DictionaryNode;
         mRootNodes[x[0]] = current_node;
         //std::cout << "Creating a new root node for " << x[0] << std::endl;
      }
      else {
         current_node = it->second;
         //std::cout << "Following root node for " << x[0] << std::endl; 
      }
      // Adding all other node
      for (int i=1;i<T;i++) {
         auto it = current_node->mChildrenNodes.find(x[i]);
         if (it == current_node->mChildrenNodes.end()) {
            DictionaryNode *new_node = new DictionaryNode;
            current_node->mChildrenNodes[x[i]] = new_node;
            current_node = new_node;
            //std::cout << "Creating a new node for " << x[i] << std::endl;
         }
         else {
            current_node = it->second;
            //std::cout << "Following node for " << x[i] << std::endl;
         }         
      }
      current_node->mValue = name;
   }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, 0x10(%rsp)
movq %rdi, %r15
movzwl 0x50(%rsp), %ebx
movq 0x10(%rdi), %rdx
leaq 0x8(%rdi), %rax
movq %rax, %rcx
testq %rdx, %rdx
je 0x64ca
movq %rax, %rcx
xorl %esi, %esi
cmpw %bx, 0x20(%rdx)
setb %sil
cmovaeq %rdx, %rcx
movq 0x10(%rdx,%rsi,8), %rdx
testq %rdx, %rdx
jne 0x64b2
movq %rax, %rdx
cmpq %rax, %rcx
je 0x64dd
cmpw 0x20(%rcx), %bx
cmovbq %rax, %rcx
movq %rcx, %rdx
cmpq %rax, %rdx
je 0x64e8
movq 0x28(%rdx), %r14
jmp 0x6536
movl $0x50, %edi
callq 0x2160
movq %rax, %r14
addq $0x10, %rax
movq %rax, (%r14)
xorl %eax, %eax
movq %rax, 0x8(%r14)
movb $0x0, 0x10(%r14)
leaq 0x28(%r14), %rcx
movl $0x0, 0x28(%r14)
movq %rax, 0x30(%r14)
movq %rcx, 0x38(%r14)
movq %rcx, 0x40(%r14)
movq %rax, 0x48(%r14)
leaq 0xe(%rsp), %rsi
movw %bx, (%rsi)
movq %r15, %rdi
callq 0x66ea
movq %r14, (%rax)
leaq 0x50(%rsp), %r13
movl $0x1, %ebp
xorl %ebx, %ebx
movzwl (%r13,%rbp,2), %r15d
movq 0x30(%r14), %rdx
leaq 0x28(%r14), %rax
movq %rax, %rcx
testq %rdx, %rdx
je 0x6574
movq %rax, %rcx
xorl %esi, %esi
cmpw %r15w, 0x20(%rdx)
setb %sil
cmovaeq %rdx, %rcx
movq 0x10(%rdx,%rsi,8), %rdx
testq %rdx, %rdx
jne 0x655b
movq %rax, %rdx
cmpq %rax, %rcx
je 0x6588
cmpw 0x20(%rcx), %r15w
cmovbq %rax, %rcx
movq %rcx, %rdx
cmpq %rax, %rdx
je 0x6593
movq 0x28(%rdx), %r14
jmp 0x65f2
addq $0x20, %r14
movl $0x50, %edi
callq 0x2160
movq %rax, %r12
addq $0x10, %rax
movq %rax, (%r12)
movq %rbx, 0x8(%r12)
movb $0x0, 0x10(%r12)
leaq 0x28(%r12), %rax
movl $0x0, 0x28(%r12)
movq %rbx, 0x30(%r12)
movq %rax, 0x38(%r12)
movq %rax, 0x40(%r12)
movq %rbx, 0x48(%r12)
movw %r15w, 0xc(%rsp)
movq %r14, %rdi
leaq 0xc(%rsp), %rsi
callq 0x66ea
movq %r12, (%rax)
movq %r12, %r14
incq %rbp
cmpq $0x10, %rbp
jne 0x6542
movq %r14, %rdi
movq 0x10(%rsp), %rsi
callq 0x20c0
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop