// File: 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:
subq $0x118, %rsp            # imm = 0x118
movq %rdi, 0x110(%rsp)
movl %esi, 0x10c(%rsp)
movq %rdx, 0x100(%rsp)
movq %rcx, 0xf8(%rsp)
movq 0x110(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0x45b0
cmpl $0x1, 0x10c(%rsp)
jne 0x4309
movq 0x100(%rsp), %rdi
callq 0x21e0
movq %rax, 0xf0(%rsp)
jmp 0x4333
movq 0x100(%rsp), %rdi
callq 0x4620
movq 0x48(%rsp), %rdi
movq %rax, %rsi
movq 0xf8(%rsp), %rdx
callq 0x1ec0
movq %rax, 0xf0(%rsp)
movq 0x48(%rsp), %rdi
movq 0xf0(%rsp), %rax
movq %rax, 0x40(%rsp)
callq 0x21e0
movq %rax, %rcx
movq 0x40(%rsp), %rax
cmpq %rcx, %rax
jbe 0x4384
movq 0x48(%rsp), %rdi
addq $0x30, %rdi
movq 0xf0(%rsp), %rsi
callq 0x4650
movq 0x48(%rsp), %rdi
callq 0x21e0
movq 0x48(%rsp), %rdi
movq %rax, %rsi
callq 0x2180
movq 0x48(%rsp), %rdi
callq 0x21e0
movq 0x48(%rsp), %rdi
movq %rax, 0x38(%rsp)
callq 0x21e0
movq %rax, %rcx
movq 0x38(%rsp), %rax
subq $0x1, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x43b4
jmp 0x43d3
leaq 0x405e(%rip), %rdi      # 0x8419
leaq 0x3d3f(%rip), %rsi      # 0x8101
movl $0x2c9, %edx            # imm = 0x2C9
leaq 0x4076(%rip), %rcx      # 0x8444
callq 0x10b0
movq 0x100(%rsp), %rsi
leaq 0xa8(%rsp), %rdi
callq 0x48d0
movq 0x100(%rsp), %rsi
leaq 0x60(%rsp), %rdi
callq 0x49c0
leaq 0xa8(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x4990
testb $0x1, %al
jne 0x4415
jmp 0x4569
movq $0x0, 0x58(%rsp)
leaq 0xa8(%rsp), %rdi
callq 0x4ae0
movq 0x48(%rsp), %rdi
movq %rax, %rsi
callq 0x4ab0
movq 0x48(%rsp), %rdi
movq %rax, %rsi
callq 0x4a80
movq 0x48(%rsp), %rdi
movq %rax, 0x30(%rsp)
callq 0x21e0
movq %rax, %rcx
movq 0x30(%rsp), %rax
subq $0x1, %rcx
andq %rcx, %rax
movq %rax, 0x50(%rsp)
movq 0x48(%rsp), %rdi
addq $0x30, %rdi
movq 0x50(%rsp), %rsi
callq 0x4b00
testb $0x1, %al
jne 0x4484
jmp 0x4520
movq 0x48(%rsp), %rdi
movq 0x58(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x58(%rsp)
movq 0x58(%rsp), %rax
movq %rax, 0x20(%rsp)
callq 0x21e0
movq 0x20(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
cmpq %rdx, %rcx
movb %al, 0x2f(%rsp)
jae 0x44c1
movb $0x1, %al
movb %al, 0x2f(%rsp)
jmp 0x44c1
movb 0x2f(%rsp), %al
testb $0x1, %al
jne 0x44cb
jmp 0x44cd
jmp 0x44ec
leaq 0x42f6(%rip), %rdi      # 0x87ca
leaq 0x3c26(%rip), %rsi      # 0x8101
movl $0x2d4, %edx            # imm = 0x2D4
leaq 0x3f5d(%rip), %rcx      # 0x8444
callq 0x10b0
jmp 0x44ee
movq 0x48(%rsp), %rdi
movq 0x50(%rsp), %rax
addq 0x58(%rsp), %rax
movq %rax, 0x18(%rsp)
callq 0x21e0
movq %rax, %rcx
movq 0x18(%rsp), %rax
subq $0x1, %rcx
andq %rcx, %rax
movq %rax, 0x50(%rsp)
jmp 0x4468
movq 0x48(%rsp), %rax
addq $0x30, %rax
movq %rax, 0x8(%rsp)
movq 0x50(%rsp), %rax
movq %rax, 0x10(%rsp)
leaq 0xa8(%rsp), %rdi
callq 0x4ae0
movq 0x8(%rsp), %rdi
movq 0x10(%rsp), %rsi
movq %rax, %rdx
callq 0x4b80
leaq 0xa8(%rsp), %rdi
callq 0x4c60
jmp 0x43e8
movq 0x48(%rsp), %rdi
callq 0x4cd0
addq $0x118, %rsp            # imm = 0x118
retq
nopl (%rax,%rax)