// File: /workspace/github_cpp_makefile_star2_O3/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, %r15
movq 0x48(%rdi), %r13
decq %r13
movq %rsi, (%rsp)
movl (%rsi), %ebx
andl %r13d, %ebx
leaq 0x30(%rdi), %r12
movq $-0x1, %rbp
xorl %r14d, %r14d
movq %r12, %rdi
movq %rbx, %rsi
callq 0x27f0
testb %al, %al
je 0x2f20
movq %r15, %rdi
movq %rbx, %rsi
callq 0x33d8
testb %al, %al
je 0x2eda
cmpq $-0x1, %rbp
cmoveq %rbx, %rbp
jmp 0x2eef
movq %r12, %rdi
movq %rbx, %rsi
callq 0x346a
movq (%rsp), %rcx
movl (%rcx), %ecx
cmpl (%rax), %ecx
je 0x2f34
addq %r14, %rbx
incq %rbx
incq %r14
andq %r13, %rbx
cmpq 0x48(%r15), %r14
jb 0x2eb2
leaq 0x1895(%rip), %rdi      # 0x479d
leaq 0x11fa(%rip), %rsi      # 0x4109
leaq 0x2e76(%rip), %rcx      # 0x5d8c
movl $0x35f, %edx            # imm = 0x35F
callq 0x10a0
cmpq $-0x1, %rbp
cmovneq %rbp, %rbx
movq %rbx, %rdx
movq $-0x1, %rbx
jmp 0x2f3b
movq $-0x1, %rdx
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop