// File: /workspace/github_cpp_makefile_star2_O3/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>>>>::hopscotch_hash<std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>>, (void*)0>(unsigned long, Hash32 const&, std::equal_to<unsigned int> const&, std::allocator<std::pair<unsigned int const, unsigned int>> const&, float, std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int>>>::key_compare const&)
hopscotch_hash(size_type bucket_count, 
                  const Hash& hash,
                  const KeyEqual& equal,
                  const Allocator& alloc,
                  float max_load_factor,
                  const typename OC::key_compare& comp) : Hash(hash),
                                                          KeyEqual(equal),
                                                          GrowthPolicy(bucket_count),
                                                          m_buckets_data(alloc), 
                                                          m_overflow_elements(comp, alloc),
                                                          m_buckets(static_empty_bucket_ptr()),
                                                          m_nb_elements(0)
    {
        
        if(bucket_count > max_bucket_count()) {
            throw std::length_error("The map exceeds its maxmimum size.");
        }
        
        if(bucket_count > 0) {
            static_assert(NeighborhoodSize - 1 > 0, "");
            
            // Can't directly construct with the appropriate size in the initializer 
            // as m_buckets_data(bucket_count, alloc) is not supported by GCC 4.8
            m_buckets_data.resize(bucket_count + NeighborhoodSize - 1);
            m_buckets = m_buckets_data.data();
        }
        
        
        this->max_load_factor(max_load_factor);
        
        
        // Check in the constructor instead of outside of a function to avoi compilation issues
        // when value_type is not complete.
        static_assert(std::is_nothrow_move_constructible<value_type>::value || 
                      std::is_copy_constructible<value_type>::value, 
                      "value_type must be either copy constructible or nothrow move constructible.");
    }

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x18, %rsp
movss %xmm0, 0xc(%rsp)
movq %rdi, %rbx
leaq 0x10(%rsp), %r15
movq %rsi, (%r15)
movq %r15, %rsi
callq 0x250e
leaq 0x8(%rbx), %r14
xorl %r12d, %r12d
movq %r12, 0x18(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%rbx)
leaq 0x28(%rbx), %rax
movl $0x0, 0x28(%rbx)
movq %r12, 0x30(%rbx)
movq %rax, 0x38(%rbx)
movq %rax, 0x40(%rbx)
movq %r12, 0x48(%rbx)
movq %rbx, %rdi
callq 0x1a6e
movq %rax, 0x50(%rbx)
movq %r12, 0x58(%rbx)
movq (%r15), %rsi
movabsq $0x7ffffffffffffc3, %rax # imm = 0x7FFFFFFFFFFFFC3
cmpq %rax, %rsi
jae 0x1a0b
testq %rsi, %rsi
je 0x1954
addq $0x3d, %rsi
movq %r14, %rdi
callq 0x1a8c
movq 0x8(%rbx), %rax
movq %rax, 0x50(%rbx)
jmp 0x1957
movq (%r14), %rax
movq 0x10(%rbx), %rcx
movq %rcx, %rdx
subq %rax, %rdx
sarq $0x4, %rdx
addq $-0x3d, %rdx
js 0x1972
cvtsi2ss %rdx, %xmm2
jmp 0x1987
movq %rdx, %rsi
shrq %rsi
andl $0x1, %edx
orq %rsi, %rdx
cvtsi2ss %rdx, %xmm2
addss %xmm2, %xmm2
movss 0x1695(%rip), %xmm1     # 0x3024
minss 0xc(%rsp), %xmm1
movss 0x168b(%rip), %xmm0     # 0x3028
maxss %xmm0, %xmm1
movss %xmm1, 0x60(%rbx)
xorps %xmm3, %xmm3
cmpq %rax, %rcx
je 0x19b1
movaps %xmm2, %xmm3
mulss %xmm3, %xmm1
cvttss2si %xmm1, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
movss 0x1663(%rip), %xmm2     # 0x302c
subss %xmm2, %xmm1
cvttss2si %xmm1, %rdx
andq %rcx, %rdx
orq %rax, %rdx
movq %rdx, 0x68(%rbx)
mulss %xmm3, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
subss %xmm2, %xmm0
cvttss2si %xmm0, %rdx
sarq $0x3f, %rcx
andq %rcx, %rdx
orq %rax, %rdx
movq %rdx, 0x70(%rbx)
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movl $0x10, %edi
callq 0x1090
movq %rax, %r12
leaq 0x16a8(%rip), %rsi      # 0x30c7
movq %rax, %rdi
callq 0x1160
movq 0x35b2(%rip), %rsi      # 0x4fe0
movq 0x359b(%rip), %rdx      # 0x4fd0
movq %r12, %rdi
callq 0x11c0
movq %rax, %r15
movq %r12, %rdi
callq 0x1100
jmp 0x1a4d
movq %rax, %r15
addq $0x20, %rbx
movq %rbx, %rdi
callq 0x186c
movq (%r14), %rdi
testq %rdi, %rdi
je 0x1a66
callq 0x1120
movq %r15, %rdi
callq 0x11d0