// 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>>>::find_position(unsigned int const&) const
std::pair<size_type, size_type> find_position(const key_type &key) const {
    size_type num_probes = 0;              // how many times we've probed
    const size_type bucket_count_minus_one = bucket_count() - 1;
    size_type bucknum = hash(key) & bucket_count_minus_one;
    size_type insert_pos = ILLEGAL_BUCKET; // where we would insert
    SPARSEHASH_STAT_UPDATE(total_lookups += 1);
    while ( 1 ) {                          // probe until something happens
      if ( !table.test(bucknum) ) {        // bucket is empty
        SPARSEHASH_STAT_UPDATE(total_probes += num_probes);
        if ( insert_pos == ILLEGAL_BUCKET )  // found no prior place to insert
          return std::pair<size_type,size_type>(ILLEGAL_BUCKET, bucknum);
        else
          return std::pair<size_type,size_type>(ILLEGAL_BUCKET, insert_pos);

      } else if ( test_deleted(bucknum) ) {// keep searching, but mark to insert
        if ( insert_pos == ILLEGAL_BUCKET )
          insert_pos = bucknum;

      } else if ( equals(key, get_key(table.unsafe_get(bucknum))) ) {
        SPARSEHASH_STAT_UPDATE(total_probes += num_probes);
        return std::pair<size_type,size_type>(bucknum, ILLEGAL_BUCKET);
      }
      ++num_probes;                        // we're doing another probe
      bucknum = (bucknum + JUMP_(key, num_probes)) & bucket_count_minus_one;
      assert(num_probes < bucket_count()
             && "Hashtable is full: an error in key_equal<> or hash<>");
    }
  }

// Assembly:
subq $0x68, %rsp
movq %rdi, 0x50(%rsp)
movq %rsi, 0x48(%rsp)
movq 0x50(%rsp), %rdi
movq %rdi, 0x20(%rsp)
movq $0x0, 0x40(%rsp)
callq 0x21e0
movq 0x20(%rsp), %rdi
subq $0x1, %rax
movq %rax, 0x38(%rsp)
movq 0x48(%rsp), %rsi
callq 0x4a80
andq 0x38(%rsp), %rax
movq %rax, 0x30(%rsp)
movq $-0x1, 0x28(%rsp)
movq 0x20(%rsp), %rdi
addq $0x30, %rdi
movq 0x30(%rsp), %rsi
callq 0x4b00
testb $0x1, %al
jne 0x6636
cmpq $-0x1, 0x28(%rsp)
jne 0x661b
leaq 0x58(%rsp), %rdi
leaq 0x5234(%rip), %rsi      # 0xb840
leaq 0x30(%rsp), %rdx
callq 0x6fd0
jmp 0x6741
leaq 0x58(%rsp), %rdi
leaq 0x5219(%rip), %rsi      # 0xb840
leaq 0x28(%rsp), %rdx
callq 0x6fd0
jmp 0x6741
movq 0x20(%rsp), %rdi
movq 0x30(%rsp), %rsi
callq 0x7000
testb $0x1, %al
jne 0x664b
jmp 0x665f
cmpq $-0x1, 0x28(%rsp)
jne 0x665d
movq 0x30(%rsp), %rax
movq %rax, 0x28(%rsp)
jmp 0x66be
movq 0x20(%rsp), %rdi
movq 0x48(%rsp), %rax
movq %rax, 0x18(%rsp)
addq $0x30, %rdi
movq 0x30(%rsp), %rsi
callq 0x70e0
movq 0x20(%rsp), %rdi
movq %rax, %rsi
callq 0x4ab0
movq 0x20(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq %rax, %rdx
callq 0x5d10
testb $0x1, %al
jne 0x66a1
jmp 0x66bc
leaq 0x58(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x518e(%rip), %rdx      # 0xb840
callq 0x7190
jmp 0x6741
jmp 0x66be
jmp 0x66c0
movq 0x20(%rsp), %rdi
movq 0x40(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x40(%rsp)
movq 0x30(%rsp), %rax
addq 0x40(%rsp), %rax
andq 0x38(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x8(%rsp)
callq 0x21e0
movq 0x8(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
cmpq %rdx, %rcx
movb %al, 0x17(%rsp)
jae 0x6711
movb $0x1, %al
movb %al, 0x17(%rsp)
jmp 0x6711
movb 0x17(%rsp), %al
testb $0x1, %al
jne 0x671b
jmp 0x671d
jmp 0x673c
leaq 0x20a6(%rip), %rdi      # 0x87ca
leaq 0x19d6(%rip), %rsi      # 0x8101
movl $0x35f, %edx            # imm = 0x35F
leaq 0x369c(%rip), %rcx      # 0x9dd3
callq 0x10b0
jmp 0x65e1
movq 0x58(%rsp), %rax
movq 0x60(%rsp), %rdx
addq $0x68, %rsp
retq