mirror of
https://github.com/boostorg/stl_interfaces.git
synced 2026-01-19 04:42:12 +00:00
Reorder the member functions of container_interface for readability.
This commit is contained in:
@@ -196,6 +196,31 @@ namespace boost { namespace stl_interfaces { inline namespace v1 {
|
||||
return *derived().begin();
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto push_front(typename D::value_type const & x) noexcept(
|
||||
noexcept(std::declval<D &>().emplace_front(x)))
|
||||
-> decltype((void)std::declval<D &>().emplace_front(x))
|
||||
{
|
||||
derived().emplace_front(x);
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto push_front(typename D::value_type && x) noexcept(
|
||||
noexcept(std::declval<D &>().emplace_front(std::move(x))))
|
||||
-> decltype((void)std::declval<D &>().emplace_front(std::move(x)))
|
||||
{
|
||||
derived().emplace_front(std::move(x));
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto pop_front() noexcept -> decltype(
|
||||
std::declval<D &>().emplace_front(
|
||||
std::declval<typename D::value_type &>()),
|
||||
(void)std::declval<D &>().erase(std::declval<D &>().begin()))
|
||||
{
|
||||
derived().erase(derived().begin());
|
||||
}
|
||||
|
||||
template<
|
||||
typename D = Derived,
|
||||
typename Enable = std::enable_if_t<
|
||||
@@ -219,6 +244,32 @@ namespace boost { namespace stl_interfaces { inline namespace v1 {
|
||||
return *std::prev(derived().end());
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto push_back(typename D::value_type const & x) noexcept(
|
||||
noexcept(std::declval<D &>().emplace_back(x)))
|
||||
-> decltype((void)std::declval<D &>().emplace_back(x))
|
||||
{
|
||||
derived().emplace_back(x);
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto push_back(typename D::value_type && x) noexcept(
|
||||
noexcept(std::declval<D &>().emplace_back(std::move(x))))
|
||||
-> decltype((void)std::declval<D &>().emplace_back(std::move(x)))
|
||||
{
|
||||
derived().emplace_back(std::move(x));
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto pop_back() noexcept -> decltype(
|
||||
std::declval<D &>().emplace_back(
|
||||
std::declval<typename D::value_type &>()),
|
||||
(void)std::declval<D &>().erase(
|
||||
std::prev(std::declval<D &>().end())))
|
||||
{
|
||||
derived().erase(std::prev(derived().end()));
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto operator[](typename D::size_type n) noexcept(
|
||||
noexcept(std::declval<D &>().begin()[n]))
|
||||
@@ -234,6 +285,28 @@ namespace boost { namespace stl_interfaces { inline namespace v1 {
|
||||
return derived().begin()[n];
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto at(typename D::size_type i)
|
||||
-> decltype(std::declval<D &>().size(), std::declval<D &>()[i])
|
||||
{
|
||||
if (derived().size() <= i) {
|
||||
throw std::out_of_range(
|
||||
"Bounds check failed in container_interface::at()");
|
||||
}
|
||||
return derived()[i];
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto at(typename D::size_type i) const -> decltype(
|
||||
std::declval<D const &>().size(), std::declval<D const &>()[i])
|
||||
{
|
||||
if (derived().size() <= i) {
|
||||
throw std::out_of_range(
|
||||
"Bounds check failed in container_interface::at()");
|
||||
}
|
||||
return derived()[i];
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto resize(typename D::size_type n) noexcept(
|
||||
noexcept(std::declval<D &>().resize(
|
||||
@@ -444,79 +517,6 @@ namespace boost { namespace stl_interfaces { inline namespace v1 {
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto push_front(typename D::value_type const & x) noexcept(
|
||||
noexcept(std::declval<D &>().emplace_front(x)))
|
||||
-> decltype((void)std::declval<D &>().emplace_front(x))
|
||||
{
|
||||
derived().emplace_front(x);
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto push_front(typename D::value_type && x) noexcept(
|
||||
noexcept(std::declval<D &>().emplace_front(std::move(x))))
|
||||
-> decltype((void)std::declval<D &>().emplace_front(std::move(x)))
|
||||
{
|
||||
derived().emplace_front(std::move(x));
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto pop_front() noexcept -> decltype(
|
||||
std::declval<D &>().emplace_front(
|
||||
std::declval<typename D::value_type &>()),
|
||||
(void)std::declval<D &>().erase(std::declval<D &>().begin()))
|
||||
{
|
||||
derived().erase(derived().begin());
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto push_back(typename D::value_type const & x) noexcept(
|
||||
noexcept(std::declval<D &>().emplace_back(x)))
|
||||
-> decltype((void)std::declval<D &>().emplace_back(x))
|
||||
{
|
||||
derived().emplace_back(x);
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto push_back(typename D::value_type && x) noexcept(
|
||||
noexcept(std::declval<D &>().emplace_back(std::move(x))))
|
||||
-> decltype((void)std::declval<D &>().emplace_back(std::move(x)))
|
||||
{
|
||||
derived().emplace_back(std::move(x));
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto pop_back() noexcept -> decltype(
|
||||
std::declval<D &>().emplace_back(
|
||||
std::declval<typename D::value_type &>()),
|
||||
(void)std::declval<D &>().erase(
|
||||
std::prev(std::declval<D &>().end())))
|
||||
{
|
||||
derived().erase(std::prev(derived().end()));
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto at(typename D::size_type i)
|
||||
-> decltype(std::declval<D &>().size(), std::declval<D &>()[i])
|
||||
{
|
||||
if (derived().size() <= i) {
|
||||
throw std::out_of_range(
|
||||
"Bounds check failed in static_vector::at()");
|
||||
}
|
||||
return derived()[i];
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto at(typename D::size_type i) const -> decltype(
|
||||
std::declval<D const &>().size(), std::declval<D const &>()[i])
|
||||
{
|
||||
if (derived().size() <= i) {
|
||||
throw std::out_of_range(
|
||||
"Bounds check failed in static_vector::at()");
|
||||
}
|
||||
return derived()[i];
|
||||
}
|
||||
|
||||
template<typename D = Derived>
|
||||
constexpr auto clear() noexcept
|
||||
-> decltype((void)std::declval<D &>().erase(
|
||||
|
||||
Reference in New Issue
Block a user