// File: attractivechaos[P]udb2/sparsepp/./sparsepp/spp.h
// Function: spp::sparse_hashtable<std::pair<unsigned int const, unsigned int>, unsigned int, Hash32, spp::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, spp::libc_allocator<std::pair<unsigned int const, unsigned int>>>::SelectKey, spp::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, spp::libc_allocator<std::pair<unsigned int const, unsigned int>>>::SetKey, std::equal_to<unsigned int>, spp::libc_allocator<std::pair<unsigned int const, unsigned int>>>::_move_from(spp::sparse_hashtable<std::pair<unsigned int const, unsigned int>, unsigned int, Hash32, spp::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, spp::libc_allocator<std::pair<unsigned int const, unsigned int>>>::SelectKey, spp::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, spp::libc_allocator<std::pair<unsigned int const, unsigned int>>>::SetKey, std::equal_to<unsigned int>, spp::libc_allocator<std::pair<unsigned int const, unsigned int>>>::MoveDontCopyT, spp::sparse_hashtable<std::pair<unsigned int const, unsigned int>, unsigned int, Hash32, spp::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, spp::libc_allocator<std::pair<unsigned int const, unsigned int>>>::SelectKey, spp::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, spp::libc_allocator<std::pair<unsigned int const, unsigned int>>>::SetKey, std::equal_to<unsigned int>, spp::libc_allocator<std::pair<unsigned int const, unsigned int>>>&, unsigned long)
void _move_from(MoveDontCopyT mover, sparse_hashtable &ht,
                   size_type min_buckets_wanted)
    {
        clear();

        // If we need to change the size of our table, do it now
        size_type resize_to;
        if (mover == MoveDontGrow)
            resize_to = ht.bucket_count();       // keep same size as old ht
        else                                     // MoveDontCopy
            resize_to = settings.min_buckets(ht.size(), min_buckets_wanted);
        if (resize_to > bucket_count())
        {
            // we don't have enough buckets
            table.resize(resize_to);               // sets the number of buckets
            settings.reset_thresholds(bucket_count());
        }

        // We use a normal iterator to get bcks from ht
        // We could use insert() here, but since we know there are
        // no duplicates, we can be more efficient
        assert((bucket_count() & (bucket_count()-1)) == 0);      // a power of two
        const size_type bucket_count_minus_one = (const size_type)(bucket_count() - 1);

        // THIS IS THE MAJOR LINE THAT DIFFERS FROM COPY_FROM():
        for (destructive_iterator it = ht.destructive_begin();
              it != ht.destructive_end(); ++it)
        {
            size_type num_probes = 0;
            size_type bucknum;
            for (bucknum = hash(get_key(*it)) & bucket_count_minus_one;
                 table.test(bucknum);                          // table.test() OK since no erase()
                 bucknum = (size_type)((bucknum + JUMP_(key, num_probes)) & (bucket_count()-1)))
            {
                ++num_probes;
                assert(num_probes < bucket_count()
                       && "Hashtable is full: an error in key_equal<> or hash<>");
            }
            table.move(bucknum, *it);    // moves the value to here
        }
        settings.inc_num_ht_copies();
    }

// Assembly:
subq $0xb8, %rsp
movq %rdi, 0xb0(%rsp)
movl %esi, 0xac(%rsp)
movq %rdx, 0xa0(%rsp)
movq %rcx, 0x98(%rsp)
movq 0xb0(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0x33d0
cmpl $0x1, 0xac(%rsp)
jne 0x3169
movq 0xa0(%rsp), %rdi
callq 0x1fa0
movq %rax, 0x90(%rsp)
jmp 0x3193
movq 0xa0(%rsp), %rdi
callq 0x34b0
movq 0x40(%rsp), %rdi
movq %rax, %rsi
movq 0x98(%rsp), %rdx
callq 0x1d60
movq %rax, 0x90(%rsp)
movq 0x40(%rsp), %rdi
movq 0x90(%rsp), %rax
movq %rax, 0x38(%rsp)
callq 0x1fa0
movq %rax, %rcx
movq 0x38(%rsp), %rax
cmpq %rcx, %rax
jbe 0x31e4
movq 0x40(%rsp), %rdi
addq $0x30, %rdi
movq 0x90(%rsp), %rsi
callq 0x34d0
movq 0x40(%rsp), %rdi
callq 0x1fa0
movq 0x40(%rsp), %rdi
movq %rax, %rsi
callq 0x1f40
movq 0x40(%rsp), %rdi
callq 0x1fa0
movq 0x40(%rsp), %rdi
movq %rax, 0x30(%rsp)
callq 0x1fa0
movq %rax, %rcx
movq 0x30(%rsp), %rax
subq $0x1, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x3214
jmp 0x3233
leaq 0x30e9(%rip), %rdi      # 0x6304
leaq 0x2e9d(%rip), %rsi      # 0x60bf
movl $0xafc, %edx            # imm = 0xAFC
leaq 0x33e2(%rip), %rcx      # 0x6610
callq 0x10c0
movq 0x40(%rsp), %rdi
callq 0x1fa0
subq $0x1, %rax
movq %rax, 0x88(%rsp)
movq 0xa0(%rsp), %rsi
leaq 0x70(%rsp), %rdi
callq 0x36d0
movq 0xa0(%rsp), %rsi
leaq 0x58(%rsp), %rdi
callq 0x3770
leaq 0x70(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x3740
testb $0x1, %al
jne 0x3285
jmp 0x33ba
movq $0x0, 0x50(%rsp)
leaq 0x70(%rsp), %rdi
callq 0x3840
movq 0x40(%rsp), %rdi
movq %rax, %rsi
callq 0x3810
movq 0x40(%rsp), %rdi
movq %rax, %rsi
callq 0x37e0
andq 0x88(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x40(%rsp), %rdi
addq $0x30, %rdi
movq 0x48(%rsp), %rsi
callq 0x3850
testb $0x1, %al
jne 0x32db
jmp 0x3377
movq 0x40(%rsp), %rdi
movq 0x50(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x50(%rsp)
movq 0x50(%rsp), %rax
movq %rax, 0x20(%rsp)
callq 0x1fa0
movq 0x20(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
cmpq %rdx, %rcx
movb %al, 0x2f(%rsp)
jae 0x3318
movb $0x1, %al
movb %al, 0x2f(%rsp)
jmp 0x3318
movb 0x2f(%rsp), %al
testb $0x1, %al
jne 0x3322
jmp 0x3324
jmp 0x3343
leaq 0x363d(%rip), %rdi      # 0x6968
leaq 0x2d8d(%rip), %rsi      # 0x60bf
movl $0xb0b, %edx            # imm = 0xB0B
leaq 0x32d2(%rip), %rcx      # 0x6610
callq 0x10c0
jmp 0x3345
movq 0x40(%rsp), %rdi
movq 0x48(%rsp), %rax
addq 0x50(%rsp), %rax
movq %rax, 0x18(%rsp)
callq 0x1fa0
movq %rax, %rcx
movq 0x18(%rsp), %rax
subq $0x1, %rcx
andq %rcx, %rax
movq %rax, 0x48(%rsp)
jmp 0x32bf
movq 0x40(%rsp), %rax
addq $0x30, %rax
movq %rax, 0x8(%rsp)
movq 0x48(%rsp), %rax
movq %rax, 0x10(%rsp)
leaq 0x70(%rsp), %rdi
callq 0x3840
movq 0x8(%rsp), %rdi
movq 0x10(%rsp), %rsi
movq %rax, %rdx
callq 0x38a0
leaq 0x70(%rsp), %rdi
callq 0x3950
jmp 0x325b
movq 0x40(%rsp), %rdi
callq 0x3980
addq $0xb8, %rsp
retq
nopl (%rax)