// File: dianejdan[P]Eclat/./PatternStore.hpp
// Function: PatternStore<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>::eclat(Pattern<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>*)
void eclat(Pattern<Typ> *parent){
        vector<Pattern<Typ> * > myChildren = parent->get_children(); // get children list

        for (int i = 0; i < myChildren.size(); ++i){ // loop through child in children list
            int newPats = 0; // a count to see if there are new Patterns

            for (int j = (i+1); j < myChildren.size(); ++j){ // find the "larger" child
                // perform the join of tid lists of two children
                vector<int> joinTidList = myChildren[i]->join_tid_list(myChildren[j]);
                if (joinTidList.size() >= minsup){ // check if the join tid list is larger than minsup
                    // add this new pattern as a new child of the smaller child for joining
                    add_pattern(myChildren[i], myChildren[j]->get_item(), joinTidList);
                    ++newPats; // new pattern count increases by 1
                }
            }
            if (newPats > 0)
                eclat(myChildren[i]); // if more than one new patterns, eclat the smaller child for joining
                                      // it is like a DFS of tree structure
        }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0xf840
movl $0x0, -0x2c(%rbp)
movslq -0x2c(%rbp), %rax
movq %rax, -0xa8(%rbp)
leaq -0x28(%rbp), %rdi
callq 0xf460
movq %rax, %rcx
movq -0xa8(%rbp), %rax
cmpq %rcx, %rax
jae 0x4386
movl $0x0, -0x30(%rbp)
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
movslq -0x34(%rbp), %rax
movq %rax, -0xb0(%rbp)
leaq -0x28(%rbp), %rdi
callq 0xf460
movq %rax, %rcx
movq -0xb0(%rbp), %rax
cmpq %rcx, %rax
jae 0x4350
movslq -0x2c(%rbp), %rsi
leaq -0x28(%rbp), %rdi
movq %rdi, -0xc0(%rbp)
callq 0xf870
movq -0xc0(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0xb8(%rbp)
movslq -0x34(%rbp), %rsi
callq 0xf870
movq -0xb8(%rbp), %rsi
movq (%rax), %rdx
leaq -0x50(%rbp), %rdi
callq 0xf890
jmp 0x4233
leaq -0x50(%rbp), %rdi
callq 0x4a40
movq -0xa0(%rbp), %rcx
movslq 0xc(%rcx), %rcx
cmpq %rcx, %rax
jb 0x432e
movslq -0x2c(%rbp), %rsi
leaq -0x28(%rbp), %rdi
movq %rdi, -0xd0(%rbp)
callq 0xf870
movq -0xd0(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0xc8(%rbp)
movslq -0x34(%rbp), %rsi
callq 0xf870
movq (%rax), %rsi
leaq -0x80(%rbp), %rdi
callq 0xfa30
jmp 0x428c
leaq -0x98(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x4b50
jmp 0x429e
movq -0xc8(%rbp), %rsi
movq -0xa0(%rbp), %rdi
leaq -0x80(%rbp), %rdx
leaq -0x98(%rbp), %rcx
callq 0xd7a0
jmp 0x42be
leaq -0x98(%rbp), %rdi
callq 0x4860
leaq -0x80(%rbp), %rdi
callq 0x2160
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
jmp 0x432e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x4398
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x4345
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x4323
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x4860
leaq -0x80(%rbp), %rdi
callq 0x2160
jmp 0x4345
leaq -0x50(%rbp), %rdi
callq 0x4860
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x41c9
leaq -0x50(%rbp), %rdi
callq 0x4860
jmp 0x4398
cmpl $0x0, -0x30(%rbp)
jle 0x4376
movslq -0x2c(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0xf870
movq -0xa0(%rbp), %rdi
movq (%rax), %rsi
callq 0x4160
jmp 0x4374
jmp 0x4376
jmp 0x4378
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x4192
leaq -0x28(%rbp), %rdi
callq 0xfa60
addq $0xd0, %rsp
popq %rbp
retq
leaq -0x28(%rbp), %rdi
callq 0xfa60
movq -0x58(%rbp), %rdi
callq 0x2390
nopw (%rax,%rax)