Skip to content

Commit

Permalink
viewコンセプトに対応
Browse files Browse the repository at this point in the history
  • Loading branch information
acd1034 committed Sep 17, 2022
1 parent 6475057 commit 38d8d7d
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
11 changes: 10 additions & 1 deletion include/ns/enumerate_view.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace ns {
/// @tparam View 元となる view の型
template <std::ranges::input_range View>
requires std::ranges::view<View>
struct enumerate_view {
struct enumerate_view : std::ranges::view_interface<enumerate_view<View>> {
private:
//! 元となる view
View base_ = View();
Expand All @@ -18,9 +18,18 @@ namespace ns {
class sentinel;

public:
enumerate_view() requires std::default_initializable<View>
= default;
constexpr enumerate_view(View base) : base_(std::move(base)) {}

constexpr iterator begin() { return {std::ranges::begin(base_), 0}; }

constexpr auto end() { return sentinel(std::ranges::end(base_)); }
};

template <class Range>
enumerate_view(Range&&) -> enumerate_view<std::views::all_t<Range>>;

template <std::ranges::input_range View>
requires std::ranges::view<View>
struct enumerate_view<View>::iterator {
Expand Down
8 changes: 5 additions & 3 deletions tests/enumerate_view/enumerate_view.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,10 @@ static_assert(not std::ranges::forward_range<test_view<int>>);
// end test 用の view

using testing_view = ns::enumerate_view<test_view<int>>;
// まだ動かない
// static_assert(std::input_or_output_iterator<std::ranges::iterator_t<testing_view>>);
// static_assert(std::sentinel_for<std::ranges::sentinel_t<testing_view>, std::ranges::iterator_t<testing_view>>);
static_assert(
std::input_or_output_iterator<std::ranges::iterator_t<testing_view>>);
static_assert(std::sentinel_for<std::ranges::sentinel_t<testing_view>,
std::ranges::iterator_t<testing_view>>);
static_assert(std::ranges::view<testing_view>);

// TEST_CASE("enumerate_view", "[enumerate_view]") {}

0 comments on commit 38d8d7d

Please sign in to comment.