Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

[libc++][ranges] P2164R9: Implements views::enumerate #73617

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

Draft
wants to merge 88 commits into
base: main
Choose a base branch
Loading
from
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
75fe088
[libc++][ranges] P2116R9: Implements `views::enumerate`
Zingam Jun 14, 2023
5d9b919
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
Zingam Dec 20, 2023
bb520bc
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
Zingam Dec 31, 2023
eb53557
WIP: Commented out improperly completed tests temporarily
Zingam Dec 31, 2023
8f922d1
WIP: Addressed comments
Zingam Dec 31, 2023
9a9f5d3
WIP: nothing
Zingam Jan 1, 2024
9d51f6c
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
Zingam Jan 1, 2024
3b5f9f3
WIP: Address comment in `adaptor.pass.cpp`
Zingam Jan 1, 2024
20c59fb
WIP: tweak
Zingam Jan 1, 2024
963aa35
WIP: Addressed some comments
Zingam Jan 4, 2024
6c1146b
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
Zingam Jan 4, 2024
2870bbe
REMOVED: Commented out broken test (Restore them later)
Zingam Jan 4, 2024
8a02a2e
WIP: Fixed formatting
Zingam Jan 4, 2024
2dccd6c
WIP: Addressed some comments
Zingam Jan 4, 2024
b922f91
WIP: Addressed comments in iterator/subscript
Zingam Jan 4, 2024
2d7982f
WIP: Updated iterator/artithmetic.pass
Zingam Jan 4, 2024
9cfed98
WIP: do not push
Zingam Jan 23, 2024
0c80538
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
Zingam Feb 21, 2024
5089669
Fixed LLVM target version
Zingam Feb 21, 2024
44cb342
Fixed CI
Zingam Feb 21, 2024
b4813f0
Fixed formatting
Zingam Feb 21, 2024
2c66334
Refactoring
H-G-Hristov Feb 21, 2024
deda69d
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Mar 1, 2024
cc7e27a
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Mar 1, 2024
251e8ae
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov May 1, 2024
9c2019b
Generated files
H-G-Hristov May 1, 2024
35db57f
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov May 1, 2024
c176417
Mark members `[[nodiscard]] `
H-G-Hristov May 1, 2024
645b5ce
Mark more members as `[[nodiscard]] `
H-G-Hristov May 1, 2024
16f2c8c
More `[[nodiscard]] `
H-G-Hristov May 1, 2024
124eab9
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Jul 19, 2024
ef591c5
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Jul 19, 2024
d9bdafc
Updated Release Notes
H-G-Hristov Jul 19, 2024
28592f6
Merge remote-tracking branch 'origin/main' into hgh/libcxx/P2164R9-ra…
H-G-Hristov Jul 21, 2024
1ccf784
Fixed [[nodiscard]]
H-G-Hristov Jul 21, 2024
2757c72
Try again
H-G-Hristov Jul 21, 2024
459b1e5
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Jul 21, 2024
4d9aa3f
Try again
H-G-Hristov Jul 21, 2024
44fc950
Removed excessive `[[nodiscard]]`, which is not practical on incremen…
H-G-Hristov Jul 21, 2024
805331b
Cleanup
H-G-Hristov Jul 22, 2024
cd1eb6b
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Jul 22, 2024
856d129
Try to fix CI
H-G-Hristov Jul 22, 2024
0d1c1d8
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Jul 22, 2024
5616879
WIP - nodiscard tests
H-G-Hristov Jul 23, 2024
547e1e5
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Jul 23, 2024
43f0018
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Jul 23, 2024
ab93ac3
WIP - nodiscard tests
H-G-Hristov Jul 23, 2024
62621dd
WIP - nodiscard tests
H-G-Hristov Jul 24, 2024
8b98539
WIP - nodiscard tests
H-G-Hristov Jul 24, 2024
7eb8c3a
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Jul 24, 2024
82fd225
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Jul 25, 2024
6f83477
WIP - nodiscard tests
H-G-Hristov Jul 25, 2024
a0551a5
Updated `nodiscard` tests
H-G-Hristov Jul 29, 2024
66b1019
Cleaned `nodiscard` tests
H-G-Hristov Jul 29, 2024
4e9c874
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Jul 29, 2024
6449bc9
Minor tweaks
H-G-Hristov Jul 29, 2024
b6bceeb
Minor tweak
H-G-Hristov Jul 29, 2024
d537977
Formatting
H-G-Hristov Jul 29, 2024
d7e7c91
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
Zingam Jul 29, 2024
b699d75
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
Zingam Jul 30, 2024
1a1162d
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Oct 9, 2024
8f2d945
Post merge fixes
H-G-Hristov Oct 9, 2024
dd8cb11
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
Zingam Oct 9, 2024
749357a
Post-merge fixes
H-G-Hristov Oct 9, 2024
daf5f9e
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
Zingam Oct 9, 2024
9c20572
Try to fix build
H-G-Hristov Oct 9, 2024
4c5d08b
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
Zingam Oct 13, 2024
c6fed09
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Feb 18, 2025
a2ed592
Update status pages
H-G-Hristov Feb 18, 2025
4d86aaa
Fixed formatting
H-G-Hristov Feb 18, 2025
a103387
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Feb 18, 2025
f205395
Implemented LWG3919
H-G-Hristov Feb 18, 2025
31ddab0
Try to fix CI: mark internal aliases `_LIBCPP_NODEBUG`
H-G-Hristov Feb 18, 2025
12e9cbb
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Feb 18, 2025
1d21194
Try again
H-G-Hristov Feb 18, 2025
a5be216
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Feb 18, 2025
fbd197a
Try again
H-G-Hristov Feb 18, 2025
d3afb06
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Feb 18, 2025
6056552
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov Mar 7, 2025
d98841b
Update libcxx/test/std/ranges/range.adaptors/range.enumerate/types.h
H-G-Hristov Mar 7, 2025
f964234
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov May 16, 2025
9406fee
Run generator scripts
H-G-Hristov May 16, 2025
80e3496
Apply frederick-js's suggestion to fix CI
H-G-Hristov May 16, 2025
cb285a1
Use new syntax `// REQUIRES: std-at-least-c++23`
H-G-Hristov May 16, 2025
da79bbc
Try to fix tests
H-G-Hristov May 16, 2025
7c0bf4f
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov May 16, 2025
a6b030a
Try again
H-G-Hristov May 16, 2025
bfb4ae6
Merge branch 'main' into hgh/libcxx/P2164R9-ranges-enumerate_view
H-G-Hristov May 16, 2025
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
Prev Previous commit
Next Next commit
WIP: Commented out improperly completed tests temporarily
  • Loading branch information
Zingam committed Dec 31, 2023
commit eb53557181eb01db265e25d66fdf8f6fd357f98f
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@

#include "test_iterators.h"
#include "../types.h"
#include "../types_iterators.h"

// #include "../types_iterators.h"

// template <bool Const>
// struct Iterator {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

#include "test_iterators.h"
#include "../types.h"
#include "../types_iterators.h"
// #include "../types_iterators.h"

// template <bool Const>
// struct Iter {
Expand Down Expand Up @@ -86,27 +86,27 @@
// }
// };

// template <template <bool> class It, template <bool> class St>
// struct BufferView : std::ranges::view_base {
// template <std::size_t N>
// constexpr BufferView(int (&b)[N]) : buffer_(b), size_(N) {}
template <template <bool> class It, template <bool> class St>
struct BufferView : std::ranges::view_base {
template <std::size_t N>
constexpr BufferView(int (&b)[N]) : buffer_(b), size_(N) {}

// template <std::size_t N>
// constexpr BufferView(std::array<int, N>& arr) : buffer_(arr.data()), size_(N) {}
template <std::size_t N>
constexpr BufferView(std::array<int, N>& arr) : buffer_(arr.data()), size_(N) {}

// using iterator = It<false>;
// using sentinel = St<false>;
// using const_iterator = It<true>;
// using const_sentinel = St<true>;
using iterator = It<false>;
using sentinel = St<false>;
using const_iterator = It<true>;
using const_sentinel = St<true>;

// constexpr iterator begin() { return {buffer_}; }
// constexpr const_iterator begin() const { return {buffer_}; }
// constexpr sentinel end() { return sentinel{buffer_ + size_}; }
// constexpr const_sentinel end() const { return const_sentinel{buffer_ + size_}; }
constexpr iterator begin() { return {buffer_}; }
constexpr const_iterator begin() const { return {buffer_}; }
constexpr sentinel end() { return sentinel{buffer_ + size_}; }
constexpr const_sentinel end() const { return const_sentinel{buffer_ + size_}; }

// int* buffer_;
// std::size_t size_;
// };
int* buffer_;
std::size_t size_;
};

template <template <bool> class It, template <bool> class St>
struct SizedBufferView : BufferView<It, St> {
Expand All @@ -131,116 +131,117 @@ using EnumerateSentinel = std::ranges::sentinel_t<EnumerateView<BaseView>>;
template <class BaseView>
using EnumerateConstSentinel = std::ranges::sentinel_t<const EnumerateView<BaseView>>;

constexpr void testConstraints() {
// Base is not sized
{
using Base = BufferView<Iterator, Sentinel>;
// template <typename Iterator, typename Sentinel>
// constexpr void testConstraints() {
// // Base is not sized
// {
// using Base = BufferView<Iterator, Sentinel>;

static_assert(!HasSize<Base>);
static_assert(!std::ranges::sized_range<Base>);
// static_assert(!HasSize<Base>);
// static_assert(!std::ranges::sized_range<Base>);

static_assert(!HasMinus<EnumerateIter<Base>, EnumerateSentinel<Base>>);
static_assert(!HasMinus<EnumerateIter<Base>, EnumerateConstSentinel<Base>>);
// static_assert(!HasMinus<EnumerateIter<Base>, EnumerateSentinel<Base>>);
// static_assert(!HasMinus<EnumerateIter<Base>, EnumerateConstSentinel<Base>>);

static_assert(!HasMinus<EnumerateConstIter<Base>, EnumerateSentinel<Base>>);
static_assert(!HasMinus<EnumerateConstIter<Base>, EnumerateConstSentinel<Base>>);
// static_assert(!HasMinus<EnumerateConstIter<Base>, EnumerateSentinel<Base>>);
// static_assert(!HasMinus<EnumerateConstIter<Base>, EnumerateConstSentinel<Base>>);

static_assert(!HasMinus<EnumerateSentinel<Base>, EnumerateIter<Base>>);
static_assert(!HasMinus<EnumerateSentinel<Base>, EnumerateConstIter<Base>>);
// static_assert(!HasMinus<EnumerateSentinel<Base>, EnumerateIter<Base>>);
// static_assert(!HasMinus<EnumerateSentinel<Base>, EnumerateConstIter<Base>>);

static_assert(!HasMinus<EnumerateConstSentinel<Base>, EnumerateIter<Base>>);
static_assert(!HasMinus<EnumerateConstSentinel<Base>, EnumerateConstIter<Base>>);
}
// static_assert(!HasMinus<EnumerateConstSentinel<Base>, EnumerateIter<Base>>);
// static_assert(!HasMinus<EnumerateConstSentinel<Base>, EnumerateConstIter<Base>>);
// }

// Base is sized but not cross const
{
using Base = SizedBufferView<Iterator, SizedSentinel>;
// // Base is sized but not cross const
// {
// using Base = SizedBufferView<Iterator, SizedSentinel>;

static_assert(HasSize<Base>);
static_assert(std::ranges::sized_range<Base>);
// static_assert(HasSize<Base>);
// static_assert(std::ranges::sized_range<Base>);

static_assert(HasMinus<EnumerateIter<Base>, EnumerateSentinel<Base>>);
static_assert(!HasMinus<EnumerateIter<Base>, EnumerateConstSentinel<Base>>);
// static_assert(HasMinus<EnumerateIter<Base>, EnumerateSentinel<Base>>);
// static_assert(!HasMinus<EnumerateIter<Base>, EnumerateConstSentinel<Base>>);

static_assert(!HasMinus<EnumerateConstIter<Base>, EnumerateSentinel<Base>>);
static_assert(HasMinus<EnumerateConstIter<Base>, EnumerateConstSentinel<Base>>);
// static_assert(!HasMinus<EnumerateConstIter<Base>, EnumerateSentinel<Base>>);
// static_assert(HasMinus<EnumerateConstIter<Base>, EnumerateConstSentinel<Base>>);

static_assert(HasMinus<EnumerateSentinel<Base>, EnumerateIter<Base>>);
static_assert(!HasMinus<EnumerateSentinel<Base>, EnumerateConstIter<Base>>);
// static_assert(HasMinus<EnumerateSentinel<Base>, EnumerateIter<Base>>);
// static_assert(!HasMinus<EnumerateSentinel<Base>, EnumerateConstIter<Base>>);

static_assert(!HasMinus<EnumerateConstSentinel<Base>, EnumerateIter<Base>>);
static_assert(HasMinus<EnumerateConstSentinel<Base>, EnumerateConstIter<Base>>);
}
// static_assert(!HasMinus<EnumerateConstSentinel<Base>, EnumerateIter<Base>>);
// static_assert(HasMinus<EnumerateConstSentinel<Base>, EnumerateConstIter<Base>>);
// }

// Base is cross const sized
{
using Base = BufferView<Iterator, CrossSizedSentinel>;
// // Base is cross const sized
// {
// using Base = BufferView<Iterator, CrossSizedSentinel>;

static_assert(!HasSize<Base>);
static_assert(!std::ranges::sized_range<Base>);
// static_assert(!HasSize<Base>);
// static_assert(!std::ranges::sized_range<Base>);

static_assert(HasMinus<EnumerateIter<Base>, EnumerateSentinel<Base>>);
static_assert(HasMinus<EnumerateIter<Base>, EnumerateConstSentinel<Base>>);
// static_assert(HasMinus<EnumerateIter<Base>, EnumerateSentinel<Base>>);
// static_assert(HasMinus<EnumerateIter<Base>, EnumerateConstSentinel<Base>>);

static_assert(HasMinus<EnumerateConstIter<Base>, EnumerateSentinel<Base>>);
static_assert(HasMinus<EnumerateConstIter<Base>, EnumerateConstSentinel<Base>>);
// static_assert(HasMinus<EnumerateConstIter<Base>, EnumerateSentinel<Base>>);
// static_assert(HasMinus<EnumerateConstIter<Base>, EnumerateConstSentinel<Base>>);

static_assert(HasMinus<EnumerateSentinel<Base>, EnumerateIter<Base>>);
static_assert(HasMinus<EnumerateSentinel<Base>, EnumerateConstIter<Base>>);
// static_assert(HasMinus<EnumerateSentinel<Base>, EnumerateIter<Base>>);
// static_assert(HasMinus<EnumerateSentinel<Base>, EnumerateConstIter<Base>>);

static_assert(HasMinus<EnumerateConstSentinel<Base>, EnumerateIter<Base>>);
static_assert(HasMinus<EnumerateConstSentinel<Base>, EnumerateConstIter<Base>>);
}
}
// static_assert(HasMinus<EnumerateConstSentinel<Base>, EnumerateIter<Base>>);
// static_assert(HasMinus<EnumerateConstSentinel<Base>, EnumerateConstIter<Base>>);
// }
// }

constexpr bool test() {
int buffer[] = {1, 2, 3, 4, 5};

// Base is sized but not cross const
{
using Base = SizedBufferView<Iterator, SizedSentinel>;

static_assert(HasSize<Base>);
static_assert(std::ranges::sized_range<Base>);

Base base{buffer};
auto ev = base | std::views::enumerate;
auto iter = ev.begin();
auto const_iter = std::as_const(ev).begin();
auto sent = ev.end();
auto const_sent = std::as_const(ev).end();

// Asssert difference
assert(iter - sent == -5);
assert(sent - iter == 5);
assert(const_iter - const_sent == -5);
assert(const_sent - const_iter == 5);
}

// Base is cross const sized
{
using Base = BufferView<Iterator, CrossSizedSentinel>;

static_assert(!HasSize<Base>);
static_assert(!std::ranges::sized_range<Base>);

Base base{buffer};
auto ev = base | std::views::enumerate;
auto iter = ev.begin();
auto const_iter = std::as_const(ev).begin();
auto sent = ev.end();
auto const_sent = std::as_const(ev).end();

// Assert difference
assert(iter - sent == -5);
assert(sent - iter == 5);
assert(iter - const_sent == -5);
assert(const_sent - iter == 5);
assert(const_iter - sent == -5);
assert(sent - const_iter == 5);
assert(const_iter - const_sent == -5);
assert(const_sent - const_iter == 5);
}
// int buffer[] = {1, 2, 3, 4, 5};

// // Base is sized but not cross const
// {
// using Base = SizedBufferView<Iterator, SizedSentinel>;

// static_assert(HasSize<Base>);
// static_assert(std::ranges::sized_range<Base>);

// Base base{buffer};
// auto ev = base | std::views::enumerate;
// auto iter = ev.begin();
// auto const_iter = std::as_const(ev).begin();
// auto sent = ev.end();
// auto const_sent = std::as_const(ev).end();

// // Asssert difference
// assert(iter - sent == -5);
// assert(sent - iter == 5);
// assert(const_iter - const_sent == -5);
// assert(const_sent - const_iter == 5);
// }

// // Base is cross const sized
// {
// using Base = BufferView<Iterator, CrossSizedSentinel>;

// static_assert(!HasSize<Base>);
// static_assert(!std::ranges::sized_range<Base>);

// Base base{buffer};
// auto ev = base | std::views::enumerate;
// auto iter = ev.begin();
// auto const_iter = std::as_const(ev).begin();
// auto sent = ev.end();
// auto const_sent = std::as_const(ev).end();

// // Assert difference
// assert(iter - sent == -5);
// assert(sent - iter == 5);
// assert(iter - const_sent == -5);
// assert(const_sent - iter == 5);
// assert(const_iter - sent == -5);
// assert(sent - const_iter == 5);
// assert(const_iter - const_sent == -5);
// assert(const_sent - const_iter == 5);
// }

return true;
}
Expand Down
Morty Proxy This is a proxified and sanitized view of the page, visit original site.