// 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>>>::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:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %r12
movq 0x48(%rdi), %rbp
decq %rbp
movq %rsi, (%rsp)
movl (%rsi), %ebx
andl %ebp, %ebx
leaq 0x30(%rdi), %r13
pushq $-0x1
popq %r14
xorl %r15d, %r15d
movq %r13, %rdi
movq %rbx, %rsi
callq 0x2342
testb %al, %al
je 0x2b05
movq %r12, %rdi
movq %rbx, %rsi
callq 0x2f5a
testb %al, %al
je 0x2abe
cmpq $-0x1, %r14
cmoveq %rbx, %r14
jmp 0x2ad3
movq %r13, %rdi
movq %rbx, %rsi
callq 0x2fcc
movq (%rsp), %rcx
movl (%rcx), %ecx
cmpl (%rax), %ecx
je 0x2b15
addq %r15, %rbx
incq %rbx
incq %r15
andq %rbp, %rbx
cmpq 0x48(%r12), %r15
jb 0x2a96
leaq 0x1cb0(%rip), %rdi      # 0x479d
leaq 0x1615(%rip), %rsi      # 0x4109
leaq 0x3291(%rip), %rcx      # 0x5d8c
movl $0x35f, %edx            # imm = 0x35F
callq 0x10a0
cmpq $-0x1, %r14
cmovneq %r14, %rbx
movq %rbx, %rdx
pushq $-0x1
popq %rbx
jmp 0x2b18
pushq $-0x1
popq %rdx
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq