// File: /workspace/github_cpp_makefile_star2_O2/attractivechaos[P]udb2/tsl_hopscotch_map/./hopscotch_hash.h
// Function: tsl::detail_hopscotch_hash::hopscotch_hash<std::pair<unsigned int const, unsigned int>, tsl::bhopscotch_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>, 62u, false, tsl::hh::power_of_two_growth_policy<2ul>>::KeySelect, tsl::bhopscotch_map<unsigned int, unsigned int, Hash32, std::equal_to<unsigned int>, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>, 62u, false, tsl::hh::power_of_two_growth_policy<2ul>>::ValueSelect, Hash32, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>, 62u, false, tsl::hh::power_of_two_growth_policy<2ul>, std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>>>::swap_empty_bucket_closer(unsigned long&)
bool swap_empty_bucket_closer(std::size_t& ibucket_empty_in_out) {
        tsl_hh_assert(ibucket_empty_in_out >= NeighborhoodSize);
        const std::size_t neighborhood_start = ibucket_empty_in_out - NeighborhoodSize + 1;
        
        for(std::size_t to_check = neighborhood_start; to_check < ibucket_empty_in_out; to_check++) {
            neighborhood_bitmap neighborhood_infos = m_buckets[to_check].neighborhood_infos();
            std::size_t to_swap = to_check;
            
            while(neighborhood_infos != 0 && to_swap < ibucket_empty_in_out) {
                if((neighborhood_infos & 1) == 1) {
                    tsl_hh_assert(m_buckets[ibucket_empty_in_out].empty());
                    tsl_hh_assert(!m_buckets[to_swap].empty());
                    
                    m_buckets[to_swap].swap_value_into_empty_bucket(m_buckets[ibucket_empty_in_out]);
                    
                    tsl_hh_assert(!m_buckets[to_check].check_neighbor_presence(ibucket_empty_in_out - to_check));
                    tsl_hh_assert(m_buckets[to_check].check_neighbor_presence(to_swap - to_check));
                    
                    m_buckets[to_check].toggle_neighbor_presence(ibucket_empty_in_out - to_check);
                    m_buckets[to_check].toggle_neighbor_presence(to_swap - to_check);
                    
                    
                    ibucket_empty_in_out = to_swap;
                    
                    return true;
                }
                
                to_swap++;
                neighborhood_infos = neighborhood_bitmap(neighborhood_infos >> 1);
            }
        }
        
        return false;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r10
movq %rdi, %rbx
movq (%rsi), %r15
leaq -0x3d(%r15), %r12
movq 0x50(%rdi), %rsi
movq %r15, %rax
shlq $0x4, %rax
leaq (%rax,%rsi), %rcx
addq $-0x3d0, %rcx           # imm = 0xFC30
pushq $0x2
popq %rdx
cmpq %r15, %r12
jae 0x201b
movq %r12, %r13
shlq $0x4, %r13
movq (%rsi,%r13), %r8
shrq $0x2, %r8
movq %rcx, %rdi
movq %rdx, %rbp
testq %r8, %r8
je 0x1fe3
leaq (%r12,%rbp), %r14
addq $-0x2, %r14
cmpq %r15, %r14
jae 0x1fe3
testb $0x1, %r8b
jne 0x1fec
shrq %r8
incq %rbp
addq $0x10, %rdi
jmp 0x1fbf
incq %r12
addq $0x10, %rcx
jmp 0x1fa5
addq %rax, %rsi
movq %r10, (%rsp)
callq 0x2448
movq 0x50(%rbx), %rax
movq (%rsp), %rsi
movl (%rsi), %ecx
movq (%rax,%r13), %rdx
subl %r12d, %ecx
addb $0x2, %cl
btcq %rbp, %rdx
btcq %rcx, %rdx
movq %rdx, (%rax,%r13)
movq %r14, (%rsi)
cmpq %r15, %r12
setb %al
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq