Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[INFRA] Update subtree #52

Merged
merged 2 commits into from
Aug 25, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 40 additions & 40 deletions include/hibf/contrib/std/all_view.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@
namespace seqan::stl::ranges
{

using ::std::ranges::owning_view;
using std::ranges::owning_view;

} // namespace seqan::stl::ranges

namespace seqan::stl::views
{

using ::std::ranges::views::all;
using ::std::ranges::views::all_t;
using std::ranges::views::all;
using std::ranges::views::all_t;

} // namespace seqan::stl::views
#else
Expand All @@ -43,17 +43,17 @@ namespace seqan::stl::ranges
/*!\brief A move-only view that takes unique ownership of a range.
* \sa https://en.cppreference.com/w/cpp/ranges/owning_view
*/
template <::std::ranges::range rng_t>
requires ::std::movable<rng_t> && (!seqan::stl::detail::is_initializer_list<::std::remove_cvref_t<rng_t>>)
class owning_view : public ::std::ranges::view_interface<owning_view<rng_t>>
template <std::ranges::range rng_t>
requires std::movable<rng_t> && (!seqan::stl::detail::is_initializer_list<std::remove_cvref_t<rng_t>>)
class owning_view : public std::ranges::view_interface<owning_view<rng_t>>
{
private:
//!\brief The stored range.
rng_t rng = rng_t();

public:
owning_view()
requires ::std::default_initializable<rng_t>
requires std::default_initializable<rng_t>
= default; //!< Defaulted.
owning_view(owning_view const &) = delete; //!< Deleted.
owning_view & operator=(owning_view const &) = delete; //!< Deleted.
Expand All @@ -62,7 +62,7 @@ class owning_view : public ::std::ranges::view_interface<owning_view<rng_t>>
~owning_view() = default; //!< Defaulted.

//!\brief Move construct from a range.
constexpr owning_view(rng_t && r) : rng(::std::move(r))
constexpr owning_view(rng_t && r) : rng(std::move(r))
{}

//!\brief Returns the range.
Expand All @@ -80,81 +80,81 @@ class owning_view : public ::std::ranges::view_interface<owning_view<rng_t>>
//!\overload
constexpr rng_t && base() && noexcept
{
return ::std::move(rng);
return std::move(rng);
}

//!\overload
constexpr rng_t const && base() const && noexcept
{
return ::std::move(rng);
return std::move(rng);
}

//!\brief Return the begin iterator of the range.
constexpr ::std::ranges::iterator_t<rng_t> begin()
constexpr std::ranges::iterator_t<rng_t> begin()
{
return ::std::ranges::begin(rng);
return std::ranges::begin(rng);
}

//!\overload
constexpr auto begin() const
requires ::std::ranges::range<rng_t const>
requires std::ranges::range<rng_t const>
{
return ::std::ranges::begin(rng);
return std::ranges::begin(rng);
}

//!\brief Return the end iterator of the range.
constexpr ::std::ranges::sentinel_t<rng_t> end()
constexpr std::ranges::sentinel_t<rng_t> end()
{
return ::std::ranges::end(rng);
return std::ranges::end(rng);
}

//!\overload
constexpr auto end() const
requires ::std::ranges::range<rng_t const>
requires std::ranges::range<rng_t const>
{
return ::std::ranges::end(rng);
return std::ranges::end(rng);
}

//!\brief Checks whether the range is empty.
constexpr bool empty()
requires requires { ::std::ranges::empty(rng); }
requires requires { std::ranges::empty(rng); }
{
return ::std::ranges::empty(rng);
return std::ranges::empty(rng);
}

//!\overload
constexpr bool empty() const
requires requires { ::std::ranges::empty(rng); }
requires requires { std::ranges::empty(rng); }
{
return ::std::ranges::empty(rng);
return std::ranges::empty(rng);
}

//!\brief Returns the size of the range.
constexpr auto size()
requires ::std::ranges::sized_range<rng_t>
requires std::ranges::sized_range<rng_t>
{
return ::std::ranges::size(rng);
return std::ranges::size(rng);
}

//!\overload
constexpr auto size() const
requires ::std::ranges::sized_range<rng_t const>
requires std::ranges::sized_range<rng_t const>
{
return ::std::ranges::size(rng);
return std::ranges::size(rng);
}

//!\brief Returns the raw data pointer of the range.
constexpr auto data()
requires ::std::ranges::contiguous_range<rng_t>
requires std::ranges::contiguous_range<rng_t>
{
return ::std::ranges::data(rng);
return std::ranges::data(rng);
}

//!\overload
constexpr auto data() const
requires ::std::ranges::contiguous_range<rng_t const>
requires std::ranges::contiguous_range<rng_t const>
{
return ::std::ranges::data(rng);
return std::ranges::data(rng);
}
};

Expand All @@ -168,15 +168,15 @@ class all_fn : public seqan::stl::detail::adaptor_base<all_fn>

//!\brief Checks whether a type is a view.
template <typename t>
static constexpr bool decays_to_view = ::std::ranges::view<::std::decay_t<t>>;
static constexpr bool decays_to_view = std::ranges::view<std::decay_t<t>>;

//!\brief Checks whether a type could be used for ::std::ranges::ref_view.
//!\brief Checks whether a type could be used for std::ranges::ref_view.
template <typename t>
static constexpr bool valid_for_ref_view = requires { ::std::ranges::ref_view(::std::declval<t>()); };
static constexpr bool valid_for_ref_view = requires { std::ranges::ref_view(std::declval<t>()); };

//!\brief Checks whether a type could be used for seqan3::detail::owning_view.
template <typename t>
static constexpr bool valid_for_owning_view = requires { owning_view(::std::declval<t>()); };
static constexpr bool valid_for_owning_view = requires { owning_view(std::declval<t>()); };

public:
using seqan::stl::detail::adaptor_base<all_fn>::adaptor_base;
Expand All @@ -185,22 +185,22 @@ class all_fn : public seqan::stl::detail::adaptor_base<all_fn>
* \sa https://en.cppreference.com/w/cpp/ranges/all_view
* \details
* This implements the new C++20 behaviour that is only available with gcc12 and newer.
* In contrast to the old ::std::views::all, rvalue ranges can be bound.
* In contrast to the old std::views::all, rvalue ranges can be bound.
* \returns
* * `rng` if `rng` is a view.
* * A ::std::ranges::ref_view of `rng` if that expression is valid.
* * A std::ranges::ref_view of `rng` if that expression is valid.
* * Otherwise, a seqan3::detail::owning_view of `rng`.
*/
template <seqan::stl::ranges::viewable_range rng_t>
requires decays_to_view<rng_t> || valid_for_ref_view<rng_t> || valid_for_owning_view<rng_t>
static auto impl(rng_t && rng)
{
if constexpr (decays_to_view<rng_t>)
return ::std::forward<rng_t>(rng);
return std::forward<rng_t>(rng);
else if constexpr (valid_for_ref_view<rng_t>)
return ::std::ranges::ref_view{::std::forward<rng_t>(rng)};
return std::ranges::ref_view{std::forward<rng_t>(rng)};
else
return owning_view{::std::forward<rng_t>(rng)};
return owning_view{std::forward<rng_t>(rng)};
}
};

Expand All @@ -216,7 +216,7 @@ inline constexpr auto all = seqan::stl::ranges::all_fn{};
/*!\brief Returns the type that results from appying seqan3::detail::all to a range.
*/
template <seqan::stl::ranges::viewable_range rng_t>
using all_t = decltype(all(::std::declval<rng_t>()));
using all_t = decltype(all(std::declval<rng_t>()));

} // namespace seqan::stl::views

Expand Down
Loading