@@ -564,11 +564,16 @@ inline constexpr void deque_rebalance_or_grow_2x_after_blocks_impl(dequecontrolt
564564}
565565
566566template <typename allocator, typename dequecontroltype>
567- inline constexpr void deque_allocate_on_empty_common_impl (dequecontroltype &controller, ::std::size_t align, ::std::size_t bytes) noexcept
567+ inline constexpr void deque_allocate_on_empty_common_with_n_impl (dequecontroltype &controller, ::std::size_t align, ::std::size_t bytes,
568+ ::std::size_t initial_allocated_block_counts) noexcept
568569{
570+ constexpr ::std::size_t maxval{::std::numeric_limits<::std::size_t >::max ()};
571+ if (initial_allocated_block_counts == maxval) [[unlikely]]
572+ {
573+ ::fast_io::fast_terminate ();
574+ }
575+ ::std::size_t initial_allocated_block_counts_with_sentinel{initial_allocated_block_counts + 1u };
569576 using block_typed_allocator = ::fast_io::typed_generic_allocator_adapter<allocator, typename dequecontroltype::controlreplacetype>;
570- constexpr ::std::size_t initial_allocated_block_counts{3 };
571- constexpr ::std::size_t initial_allocated_block_counts_with_sentinel{initial_allocated_block_counts + 1u };
572577 auto [allocated_blocks_ptr, allocated_blocks_count] = block_typed_allocator::allocate_at_least (initial_allocated_block_counts_with_sentinel);
573578 // we need a null terminator as sentinel like c style string does
574579 --allocated_blocks_count;
@@ -596,6 +601,13 @@ inline constexpr void deque_allocate_on_empty_common_impl(dequecontroltype &cont
596601 back_block.curr_ptr = halfposptr;
597602}
598603
604+ template <typename allocator, typename dequecontroltype>
605+ inline constexpr void deque_allocate_on_empty_common_impl (dequecontroltype &controller, ::std::size_t align, ::std::size_t bytes) noexcept
606+ {
607+ constexpr ::std::size_t initial_allocated_block_counts{3 };
608+ ::fast_io::containers::details::deque_allocate_on_empty_common_with_n_impl<allocator>(controller, align, bytes, initial_allocated_block_counts);
609+ }
610+
599611template <typename allocator, typename dequecontroltype>
600612inline constexpr void deque_grow_back_common_impl (
601613 dequecontroltype &controller,
@@ -1193,6 +1205,28 @@ deque_erase_common_trivial_impl(::fast_io::containers::details::deque_controller
11931205 return first;
11941206}
11951207
1208+ #if 0
1209+ template <typename allocator, typename dequecontroltype>
1210+ inline constexpr void deque_reserve_back_spaces_impl(dequecontroltype &controller, ::std::size_t n, ::std::size_t align, ::std::size_t blockbytes) noexcept
1211+ {
1212+ ::std::size_t const nb{n/blockbytes};
1213+
1214+ if (controller.controller_block.controller_start_ptr == nullptr)
1215+ {
1216+ ::fast_io::containers::details::deque_allocate_on_empty_common_with_n_impl<allocator>(
1217+ controller, align, blockbytes, nb);
1218+ return;
1219+ }
1220+
1221+ }
1222+
1223+ template <typename allocator, ::std::size_t align, ::std::size_t sz, ::std::size_t block_size, typename dequecontroltype>
1224+ inline constexpr void deque_reserve_back_spaces(dequecontroltype &controller, ::std::size_t n)
1225+ {
1226+
1227+ }
1228+ #endif
1229+
11961230} // namespace details
11971231
11981232template <::std::forward_iterator ForwardIt>
0 commit comments