// 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>>>>::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 0x245c
leaq 0x8(%rbx), %r14
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%rbx)
andq $0x0, 0x18(%rbx)
leaq 0x28(%rbx), %rax
andl $0x0, 0x28(%rbx)
andq $0x0, 0x30(%rbx)
movq %rax, 0x38(%rbx)
movq %rax, 0x40(%rbx)
andq $0x0, 0x48(%rbx)
movq %rbx, %rdi
callq 0x1840
movq %rax, 0x50(%rbx)
andq $0x0, 0x58(%rbx)
movq (%r15), %rsi
movabsq $0x7ffffffffffffc3, %rax # imm = 0x7FFFFFFFFFFFFC3
cmpq %rax, %rsi
jae 0x17e4
testq %rsi, %rsi
je 0x17ca
addq $0x3d, %rsi
movq %r14, %rdi
callq 0x187e
movq 0x8(%rbx), %rax
movq %rax, 0x50(%rbx)
movq %rbx, %rdi
movss 0xc(%rsp), %xmm0
callq 0x18b2
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
pushq $0x10
popq %rdi
callq 0x1090
movq %rax, %r12
leaq 0x18b1(%rip), %rsi      # 0x30a7
movq %rax, %rdi
callq 0x1160
movq 0x47db(%rip), %rsi      # 0x5fe0
movq 0x47c4(%rip), %rdx      # 0x5fd0
movq %r12, %rdi
callq 0x11c0
movq %rax, %r15
movq %r12, %rdi
callq 0x1100
jmp 0x1824
movq %rax, %r15
addq $0x20, %rbx
movq %rbx, %rdi
callq 0x16d2
movq %r14, %rdi
callq 0x1724
movq %r15, %rdi
callq 0x11d0