// File: /workspace/github_cpp_makefile_star2_O2/attractivechaos[P]udb2/sparsehash/./sparsehash/internal/sparsehashtable.h
// Function: google::sparse_hashtable<std::pair<unsigned int const, unsigned int>, unsigned int, Hash32, google::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, google::libc_allocator_with_realloc<std::pair<unsigned int const, unsigned int>>>::SelectKey, google::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, google::libc_allocator_with_realloc<std::pair<unsigned int const, unsigned int>>>::SetKey, std::equal_to<unsigned int>, google::libc_allocator_with_realloc<std::pair<unsigned int const, unsigned int>>>::move_from(google::sparse_hashtable<std::pair<unsigned int const, unsigned int>, unsigned int, Hash32, google::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, google::libc_allocator_with_realloc<std::pair<unsigned int const, unsigned int>>>::SelectKey, google::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, google::libc_allocator_with_realloc<std::pair<unsigned int const, unsigned int>>>::SetKey, std::equal_to<unsigned int>, google::libc_allocator_with_realloc<std::pair<unsigned int const, unsigned int>>>::MoveDontCopyT, google::sparse_hashtable<std::pair<unsigned int const, unsigned int>, unsigned int, Hash32, google::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, google::libc_allocator_with_realloc<std::pair<unsigned int const, unsigned int>>>::SelectKey, google::sparse_hash_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, google::libc_allocator_with_realloc<std::pair<unsigned int const, unsigned int>>>::SetKey, std::equal_to<unsigned int>, google::libc_allocator_with_realloc<std::pair<unsigned int const, unsigned int>>>&, unsigned long)
void move_from(MoveDontCopyT mover, sparse_hashtable &ht,
                 size_type min_buckets_wanted) {
    clear();            // clear table, set num_deleted to 0

    // 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 non-deleted bcks from ht
    // We could use insert() here, but since we know there are
    // no duplicates and no deleted items, we can be more efficient
    assert( (bucket_count() & (bucket_count()-1)) == 0);      // a power of two
    // 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;              // how many times we've probed
      size_type bucknum;
      for ( bucknum = hash(get_key(*it)) & (bucket_count()-1);  // h % buck_cnt
            table.test(bucknum);                          // not empty
            bucknum = (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.set(bucknum, *it);               // copies the value to here
    }
    settings.inc_num_ht_copies();
  }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x98, %rsp
movq %rcx, %r15
movq %rdx, %rbx
movl %esi, %ebp
movq %rdi, %r14
callq 0x2156
cmpl $0x1, %ebp
jne 0x2034
movq 0x48(%rbx), %rax
jmp 0x2047
movq 0x50(%rbx), %rsi
subq 0x28(%rbx), %rsi
movq %r14, %rdi
movq %r15, %rdx
callq 0x1736
movq 0x48(%r14), %rcx
cmpq %rcx, %rax
jbe 0x206c
leaq 0x30(%r14), %rdi
movq %rax, %rsi
callq 0x2180
movq 0x48(%r14), %rsi
movq %r14, %rdi
callq 0x1860
movq 0x48(%r14), %rcx
leaq -0x1(%rcx), %rax
testq %rax, %rcx
jne 0x2137
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq 0x224e
leaq 0x30(%r14), %rbp
leaq 0x50(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x22c8
leaq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x27aa
testb %al, %al
je 0x2102
movq 0x28(%rsp), %rax
movl 0x48(%r14), %r12d
decl %r12d
andl (%rax), %r12d
pushq $0x1
popq %r13
movq %rbp, %rdi
movq %r12, %rsi
callq 0x2342
testb %al, %al
je 0x20e6
movq 0x48(%r14), %rax
cmpq %rax, %r13
jae 0x2118
addq %r13, %r12
decq %rax
andq %rax, %r12
incq %r13
jmp 0x20c0
movq 0x28(%rsp), %rdx
movq %rbp, %rdi
movq %r12, %rsi
callq 0x238e
leaq 0x8(%rsp), %rdi
callq 0x23fe
jmp 0x208f
incl 0x1c(%r14)
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x267e(%rip), %rdi      # 0x479d
leaq 0x1fe3(%rip), %rsi      # 0x4109
leaq 0x231f(%rip), %rcx      # 0x444c
movl $0x2d4, %edx            # imm = 0x2D4
callq 0x10a0
leaq 0x22e3(%rip), %rdi      # 0x4421
leaq 0x1fc4(%rip), %rsi      # 0x4109
leaq 0x2300(%rip), %rcx      # 0x444c
movl $0x2c9, %edx            # imm = 0x2C9
callq 0x10a0