// File: attractivechaos[P]udb2/sparsehash/./sparsehash/internal/densehashtable.h
// Function: google::dense_hashtable<std::pair<unsigned int const, unsigned int>, unsigned int, Hash32, google::dense_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::dense_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>>>::copy_from(google::dense_hashtable<std::pair<unsigned int const, unsigned int>, unsigned int, Hash32, google::dense_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::dense_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>>> const&, unsigned long)
void copy_from(const dense_hashtable &ht, size_type min_buckets_wanted) {
    clear_to_size(settings.min_buckets(ht.size(), min_buckets_wanted));

    // 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
    for ( const_iterator it = ht.begin(); it != ht.end(); ++it ) {
      size_type num_probes = 0;              // how many times we've probed
      size_type bucknum;
      const size_type bucket_count_minus_one = bucket_count() - 1;
      for (bucknum = hash(get_key(*it)) & bucket_count_minus_one;
           !test_empty(bucknum);                               // not empty
           bucknum = (bucknum + JUMP_(key, num_probes)) & bucket_count_minus_one) {
        ++num_probes;
        assert(num_probes < bucket_count()
               && "Hashtable is full: an error in key_equal<> or hash<>");
      }
      set_value(&table[bucknum], *it);       // copies the value to here
      num_elements++;
    }
    settings.inc_num_ht_copies();
  }

// Assembly:
subq $0x88, %rsp
movq %rdi, 0x80(%rsp)
movq %rsi, 0x78(%rsp)
movq %rdx, 0x70(%rsp)
movq 0x80(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x78(%rsp), %rdi
callq 0x2b00
movq 0x18(%rsp), %rdi
movq %rax, %rsi
movq 0x70(%rsp), %rdx
callq 0x1c60
movq 0x18(%rsp), %rdi
movq %rax, %rsi
callq 0x2d50
movq 0x18(%rsp), %rdi
callq 0x1ed0
movq 0x18(%rsp), %rdi
movq %rax, 0x20(%rsp)
callq 0x1ed0
movq %rax, %rcx
movq 0x20(%rsp), %rax
subq $0x1, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x2b9f
jmp 0x2bbe
leaq 0x3314(%rip), %rdi      # 0x5eba
leaq 0x256b(%rip), %rsi      # 0x5118
movl $0x283, %edx            # imm = 0x283
leaq 0x332c(%rip), %rcx      # 0x5ee5
callq 0x1090
movq 0x78(%rsp), %rsi
leaq 0x58(%rsp), %rdi
callq 0x2e50
movq 0x78(%rsp), %rsi
leaq 0x40(%rsp), %rdi
callq 0x2ec0
leaq 0x58(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x2e90
testb $0x1, %al
jne 0x2bf4
jmp 0x2d2f
movq 0x18(%rsp), %rdi
movq $0x0, 0x38(%rsp)
callq 0x1ed0
subq $0x1, %rax
movq %rax, 0x28(%rsp)
leaq 0x58(%rsp), %rdi
callq 0x2f40
movq 0x18(%rsp), %rdi
movq %rax, %rsi
callq 0x23a0
movq 0x18(%rsp), %rdi
movq %rax, %rsi
callq 0x2f10
andq 0x28(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x18(%rsp), %rdi
movq 0x30(%rsp), %rsi
callq 0x2f50
xorb $-0x1, %al
testb $0x1, %al
jne 0x2c58
jmp 0x2cdb
movq 0x18(%rsp), %rdi
movq 0x38(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rax
movq %rax, 0x8(%rsp)
callq 0x1ed0
movq 0x8(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
cmpq %rdx, %rcx
movb %al, 0x17(%rsp)
jae 0x2c95
movb $0x1, %al
movb %al, 0x17(%rsp)
jmp 0x2c95
movb 0x17(%rsp), %al
testb $0x1, %al
jne 0x2c9f
jmp 0x2ca1
jmp 0x2cc0
leaq 0x35b4(%rip), %rdi      # 0x625c
leaq 0x2469(%rip), %rsi      # 0x5118
movl $0x28d, %edx            # imm = 0x28D
leaq 0x322a(%rip), %rcx      # 0x5ee5
callq 0x1090
jmp 0x2cc2
movq 0x30(%rsp), %rax
addq 0x38(%rsp), %rax
andq 0x28(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x2c3e
movq 0x18(%rsp), %rax
movq 0x48(%rax), %rax
movq 0x30(%rsp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, (%rsp)
leaq 0x58(%rsp), %rdi
callq 0x2f40
movq (%rsp), %rsi
movq 0x18(%rsp), %rdi
movq %rax, %rdx
callq 0x23f0
movq 0x18(%rsp), %rax
movq 0x30(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x30(%rax)
leaq 0x58(%rsp), %rdi
callq 0x2fe0
jmp 0x2bcd
movq 0x18(%rsp), %rdi
callq 0x3040
addq $0x88, %rsp
retq
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)