@@ -44,7 +44,7 @@ inline constexpr from_range_t from_range;
4444}; // namespace beman
4545
4646// Private utilities
47- namespace beman ::details::inplace_vector {
47+ namespace beman ::inplace_vector::details {
4848
4949// clang-format off
5050// Smallest unsigned integer that can represent values in [0, N].
@@ -80,10 +80,7 @@ concept lessthan_comparable = requires(const T &a, const T &b) {
8080 { a < b } -> std::convertible_to<bool >;
8181};
8282
83- } // namespace beman::details::inplace_vector
84-
8583// Types implementing the `inplace_vector`'s storage
86- namespace beman ::details::inplace_vector {
8784namespace storage {
8885
8986// Storage for zero elements.
@@ -271,22 +268,20 @@ struct inplace_vector_base : private storage::storage_for<T, N> {
271268 // element access
272269
273270 constexpr reference operator [](size_type n) {
274- return details::inplace_vector:: index (*this , n);
271+ return details::index (*this , n);
275272 }
276273 constexpr const_reference operator [](size_type n) const {
277- return details::inplace_vector::index (*this , n);
278- }
279- constexpr reference front () {
280- return details::inplace_vector::index (*this , size_type (0 ));
274+ return details::index (*this , n);
281275 }
276+ constexpr reference front () { return details::index (*this , size_type (0 )); }
282277 constexpr const_reference front () const {
283- return details::inplace_vector:: index (*this , size_type (0 ));
278+ return details::index (*this , size_type (0 ));
284279 }
285280 constexpr reference back () {
286- return details::inplace_vector:: index (*this , size () - size_type (1 ));
281+ return details::index (*this , size () - size_type (1 ));
287282 }
288283 constexpr const_reference back () const {
289- return details::inplace_vector:: index (*this , size () - size_type (1 ));
284+ return details::index (*this , size () - size_type (1 ));
290285 }
291286
292287 // [containers.sequences.inplace_vector.data], data access
@@ -361,7 +356,7 @@ struct inplace_vector_base : private storage::storage_for<T, N> {
361356 return unchecked_emplace_back (std::forward<T &&>(x));
362357 }
363358
364- template <details::inplace_vector:: container_compatible_range<T> R>
359+ template <details::container_compatible_range<T> R>
365360 constexpr std::ranges::borrowed_iterator_t <R> try_append_range (R &&rg)
366361 requires(std::constructible_from<T, std::ranges::range_reference_t <R>>)
367362 {
@@ -428,7 +423,7 @@ struct inplace_vector_base : private storage::storage_for<T, N> {
428423
429424 constexpr friend auto operator <=>(const inplace_vector_base &x,
430425 const inplace_vector_base &y)
431- requires (beman:: details::inplace_vector ::lessthan_comparable<T>)
426+ requires (details::lessthan_comparable<T>)
432427 {
433428 if constexpr (std::three_way_comparable<T>) {
434429 return std::lexicographical_compare_three_way (x.begin (), x.end (),
@@ -514,19 +509,17 @@ struct inplace_vector_base : private storage::storage_for<T, N> {
514509 }
515510};
516511
517- } // namespace beman::details::inplace_vector
512+ } // namespace beman::inplace_vector::details
518513
519- namespace beman {
514+ namespace beman ::inplace_vector {
520515
521516template <typename IV>
522517concept has_constexpr_support =
523- details::inplace_vector::satify_constexpr<typename IV::value_type,
524- IV::capacity ()>;
518+ details::satify_constexpr<typename IV::value_type, IV::capacity()>;
525519
526520// / Dynamically-resizable fixed-N vector with inplace storage.
527521template <class T , size_t N>
528- struct inplace_vector
529- : public details::inplace_vector::inplace_vector_base<T, N> {
522+ struct inplace_vector : public details ::inplace_vector_base<T, N> {
530523 using value_type = T;
531524 using pointer = T *;
532525 using const_pointer = const T *;
@@ -563,7 +556,7 @@ struct inplace_vector
563556 return this ->back ();
564557 }
565558
566- template <details::inplace_vector:: container_compatible_range<T> R>
559+ template <details::container_compatible_range<T> R>
567560 constexpr void append_range (R &&rg)
568561 requires(std::constructible_from<T, std::ranges::range_reference_t <R>>)
569562 {
@@ -614,7 +607,7 @@ struct inplace_vector
614607 return pos;
615608 }
616609
617- template <details::inplace_vector:: container_compatible_range<T> R>
610+ template <details::container_compatible_range<T> R>
618611 constexpr iterator insert_range (const_iterator position, R &&rg)
619612 requires(std::constructible_from<T, std::ranges::range_reference_t <R>> &&
620613 std::movable<T>)
@@ -672,7 +665,7 @@ struct inplace_vector
672665 this ->clear ();
673666 insert (this ->begin (), first, last);
674667 }
675- template <details::inplace_vector:: container_compatible_range<T> R>
668+ template <details::container_compatible_range<T> R>
676669 constexpr void assign_range (R &&rg)
677670 requires(std::constructible_from<T, std::ranges::range_reference_t <R>> &&
678671 std::movable<T>)
@@ -738,13 +731,13 @@ struct inplace_vector
738731 if (pos >= this ->size ()) [[unlikely]] {
739732 BEMAN_IV_THROW_OR_ABORT (std::out_of_range (" inplace_vector::at" ));
740733 }
741- return details::inplace_vector:: index (*this , pos);
734+ return details::index (*this , pos);
742735 }
743736 constexpr const_reference at (size_type pos) const {
744737 if (pos >= this ->size ()) [[unlikely]] {
745738 BEMAN_IV_THROW_OR_ABORT (std::out_of_range (" inplace_vector::at" ));
746739 }
747- return details::inplace_vector:: index (*this , pos);
740+ return details::index (*this , pos);
748741 }
749742
750743 // [containers.sequences.inplace_vector.cons], construct/copy/destroy
@@ -780,7 +773,7 @@ struct inplace_vector
780773 insert (this ->begin (), first, last);
781774 }
782775
783- template <details::inplace_vector:: container_compatible_range<T> R>
776+ template <details::container_compatible_range<T> R>
784777 constexpr inplace_vector (beman::from_range_t , R &&rg)
785778 requires(std::constructible_from<T, std::ranges::range_reference_t <R>> &&
786779 std::movable<T>)
@@ -791,8 +784,7 @@ struct inplace_vector
791784
792785namespace freestanding {
793786template <class T , size_t N>
794- struct inplace_vector
795- : public details::inplace_vector::inplace_vector_base<T, N> {
787+ struct inplace_vector : public details ::inplace_vector_base<T, N> {
796788 using value_type = T;
797789 using pointer = T *;
798790 using const_pointer = const T *;
@@ -818,7 +810,7 @@ struct inplace_vector
818810 requires(std::constructible_from<T, T &&>)
819811 = delete;
820812
821- template <details::inplace_vector:: container_compatible_range<T> R>
813+ template <details::container_compatible_range<T> R>
822814 constexpr void append_range (R &&rg)
823815 requires(std::constructible_from<T, std::ranges::range_reference_t <R>>)
824816 = delete;
@@ -835,7 +827,7 @@ struct inplace_vector
835827 std::movable<T>)
836828 = delete;
837829
838- template <details::inplace_vector:: container_compatible_range<T> R>
830+ template <details::container_compatible_range<T> R>
839831 constexpr iterator insert_range (const_iterator position, R &&rg)
840832 requires(std::constructible_from<T, std::ranges::range_reference_t <R>> &&
841833 std::movable<T>)
@@ -871,7 +863,7 @@ struct inplace_vector
871863 requires(std::constructible_from<T, std::iter_reference_t <InputIterator>> &&
872864 std::movable<T>)
873865 = delete;
874- template <details::inplace_vector:: container_compatible_range<T> R>
866+ template <details::container_compatible_range<T> R>
875867 constexpr void assign_range (R &&rg)
876868 requires(std::constructible_from<T, std::ranges::range_reference_t <R>> &&
877869 std::movable<T>)
@@ -925,7 +917,7 @@ struct inplace_vector
925917 std::movable<T>)
926918 = delete;
927919
928- template <details::inplace_vector:: container_compatible_range<T> R>
920+ template <details::container_compatible_range<T> R>
929921 constexpr inplace_vector (beman::from_range_t , R &&rg)
930922 requires(std::constructible_from<T, std::ranges::range_reference_t <R>> &&
931923 std::movable<T>)
@@ -935,25 +927,24 @@ struct inplace_vector
935927} // namespace freestanding
936928
937929template <typename T, std::size_t N, typename U = T>
938- constexpr std::size_t
939- erase (details::inplace_vector::inplace_vector_base<T, N> &c, const U &value) {
930+ constexpr std::size_t erase (details::inplace_vector_base<T, N> &c,
931+ const U &value) {
940932 auto it = std::remove (c.begin (), c.end (), value);
941933 auto r = std::distance (it, c.end ());
942934 c.erase (it, c.end ());
943935 return r;
944936}
945937
946938template <typename T, std::size_t N, typename Predicate>
947- constexpr std::size_t
948- erase_if (details::inplace_vector::inplace_vector_base<T, N> &c,
949- Predicate pred) {
939+ constexpr std::size_t erase_if (details::inplace_vector_base<T, N> &c,
940+ Predicate pred) {
950941 auto it = std::remove_if (c.begin (), c.end (), pred);
951942 auto r = std::distance (it, c.end ());
952943 c.erase (it, c.end ());
953944 return r;
954945}
955946
956- } // namespace beman
947+ } // namespace beman::inplace_vector
957948
958949#undef IV_EXPECT
959950
0 commit comments