// File: tedsharpe[P]ORFCall/ORFCall.cc
// Function: (anonymous namespace)::Reference::buildDictionary()
void Reference::buildDictionary()
{
    mRefSeqRC.reserve(mRefSeq.size());
    for ( auto itr=mRefSeq.rbegin(),end=mRefSeq.rend(); itr != end; ++itr )
        mRefSeqRC.push_back(complement(*itr));

    // build a dictionary of unique kmers in ref and ref RC
    mUniqueKmers.reserve(2*mRefSeq.size());
    Offset offset = 0;
    Kmer end(mRefSeq.end()-mK+1);
    for ( Kmer itr(mRefSeq.begin()); itr != end; ++itr )
        mUniqueKmers[itr].set(offset++,false);

    offset = 0;
    end = mRefSeqRC.end()-mK+1;
    for ( Kmer itr(mRefSeqRC.begin()); itr != end; ++itr )
        mUniqueKmers[itr].set(offset++,true);

    // delete duplicates
    auto dItr(mUniqueKmers.begin()), dEnd(mUniqueKmers.end());
    while ( dItr != dEnd )
        if ( !dItr->second.isUnique() )
            dItr = mUniqueKmers.erase(dItr);
        else
            ++dItr;
}

// Assembly:
subq $0xc8, %rsp
movq %rdi, 0xc0(%rsp)
movq 0xc0(%rsp), %rdi
movq %rdi, 0x18(%rsp)
movq %rdi, %rax
addq $0x20, %rax
movq %rax, 0x10(%rsp)
addq $0x8, %rdi
callq 0x17530
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x17370
movq 0x18(%rsp), %rsi
addq $0x8, %rsi
leaq 0xb8(%rsp), %rdi
callq 0x19db0
movq 0x18(%rsp), %rsi
addq $0x8, %rsi
leaq 0xb0(%rsp), %rdi
callq 0x19e00
leaq 0xb8(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
callq 0x19e50
testb $0x1, %al
jne 0x9125
jmp 0x9170
movq 0x18(%rsp), %rax
addq $0x20, %rax
movq %rax, 0x8(%rsp)
leaq 0xb8(%rsp), %rdi
callq 0x19e80
movzbl (%rax), %edi
callq 0xa980
movq 0x8(%rsp), %rdi
movb %al, 0xaf(%rsp)
leaq 0xaf(%rsp), %rsi
callq 0x17500
leaq 0xb8(%rsp), %rdi
callq 0x19eb0
jmp 0x910a
movq 0x18(%rsp), %rdi
movq %rdi, %rax
addq $0x38, %rax
movq %rax, (%rsp)
addq $0x8, %rdi
callq 0x17530
movq (%rsp), %rdi
movq %rax, %rsi
shlq %rsi
callq 0xa9b0
movq 0x18(%rsp), %rdi
movq $0x0, 0xa0(%rsp)
addq $0x8, %rdi
callq 0x177d0
movq %rax, %rcx
movq 0x18(%rsp), %rax
movq %rcx, 0x80(%rsp)
movl (%rax), %eax
movl %eax, %esi
leaq 0x80(%rsp), %rdi
callq 0x19ee0
movq %rax, 0x88(%rsp)
leaq 0x88(%rsp), %rdi
movl $0x1, %esi
callq 0x17610
movq %rax, 0x90(%rsp)
leaq 0x98(%rsp), %rdi
leaq 0x90(%rsp), %rsi
callq 0x17790
movq 0x18(%rsp), %rdi
addq $0x8, %rdi
callq 0x175e0
movq %rax, 0x70(%rsp)
leaq 0x78(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x17790
leaq 0x78(%rsp), %rdi
leaq 0x98(%rsp), %rsi
callq 0x19f20
testb $0x1, %al
jne 0x9244
jmp 0x9286
movq 0x18(%rsp), %rdi
addq $0x38, %rdi
leaq 0x78(%rsp), %rsi
callq 0xa9e0
movq %rax, %rdi
movq 0xa0(%rsp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, 0xa0(%rsp)
movl %eax, %esi
xorl %edx, %edx
callq 0xaa10
leaq 0x78(%rsp), %rdi
callq 0x19f60
jmp 0x922c
movq 0x18(%rsp), %rdi
movq $0x0, 0xa0(%rsp)
addq $0x20, %rdi
callq 0x177d0
movq %rax, %rcx
movq 0x18(%rsp), %rax
movq %rcx, 0x50(%rsp)
movl (%rax), %eax
movl %eax, %esi
leaq 0x50(%rsp), %rdi
callq 0x19ee0
movq %rax, 0x58(%rsp)
leaq 0x58(%rsp), %rdi
movl $0x1, %esi
callq 0x17610
movq %rax, 0x60(%rsp)
leaq 0x68(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x17790
movq 0x18(%rsp), %rdi
movq 0x68(%rsp), %rax
movq %rax, 0x98(%rsp)
addq $0x20, %rdi
callq 0x175e0
movq %rax, 0x40(%rsp)
leaq 0x48(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x17790
leaq 0x48(%rsp), %rdi
leaq 0x98(%rsp), %rsi
callq 0x19f20
testb $0x1, %al
jne 0x932a
jmp 0x936f
movq 0x18(%rsp), %rdi
addq $0x38, %rdi
leaq 0x48(%rsp), %rsi
callq 0xa9e0
movq %rax, %rdi
movq 0xa0(%rsp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, 0xa0(%rsp)
movl %eax, %esi
movl $0x1, %edx
callq 0xaa10
leaq 0x48(%rsp), %rdi
callq 0x19f60
jmp 0x9312
movq 0x18(%rsp), %rdi
addq $0x38, %rdi
callq 0xaa60
movq 0x18(%rsp), %rdi
movq %rax, 0x38(%rsp)
addq $0x38, %rdi
callq 0xaa90
movq %rax, 0x30(%rsp)
leaq 0x38(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0xaac0
testb $0x1, %al
jne 0x93aa
jmp 0x93fe
leaq 0x38(%rsp), %rdi
callq 0xaae0
movq %rax, %rdi
addq $0x8, %rdi
callq 0xab00
testb $0x1, %al
jne 0x93f2
movq 0x18(%rsp), %rdi
addq $0x38, %rdi
movq 0x38(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rsi
callq 0xab20
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq %rax, 0x38(%rsp)
jmp 0x93fc
leaq 0x38(%rsp), %rdi
callq 0xab60
jmp 0x9395
addq $0xc8, %rsp
retq
nopw %cs:(%rax,%rax)