From 09bd19995c0360d38b4ca850ef1162812b16fa14 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Mon, 4 Nov 2024 17:42:03 +0100 Subject: [PATCH 01/28] [oneDPL][rfc][zip_view] + draft --- rfcs/proposed/zip_view/README.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 rfcs/proposed/zip_view/README.md diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md new file mode 100644 index 00000000000..2a1518746c0 --- /dev/null +++ b/rfcs/proposed/zip_view/README.md @@ -0,0 +1,25 @@ +# zip_view Support for the oneDPL Range APIs with C++20 + +## Introduction +`std::ranges::zip_view` is powerful utility enables developers to combine two or more ranges into a single view, +where each element is represented as a tuple containing corresponding elements from each input range. + +## Motivations +`std::ranges::zip_view` is a convenient way to combine multiple ranges into a single view, where each element of +the resulting range is a tuple containing one element from each of the input ranges. This can be particularly +useful for iterating over multiple collections in parallel. `std::ranges::zip_view` is introduced starting with C++23, +but there are many users who work with C++20 standard yet. So, oneDPL introduces `oneapi::dpl::ranges::zip_view`, +which the same API and functionality as `std::ranges::zip_view`. + + +### Key Requirements +`oneapi::dpl::ranges::zip_view` should have: +- API compliance with `std::ranges::zip_view` +- `oneapi::dpl::__internal::tuple` underhood, due to `std::tuple` has issues with swapability and device copyability. + + +### Performance +Combining `std::ranges::zip_view` with data pipelines and kernel fusion enables developers to write expressive, +efficient code for processing multiple related datasets. This approach not only simplifies the logic but also +optimizes performance, making it an essential technique in modern C++ development. Whether you're working with +simple transformations or complex data processing workflows, zip_view can be a valuable utility. From b56c860fd219269d20ab2b78681572e55d2d1180 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Wed, 27 Nov 2024 16:42:07 +0100 Subject: [PATCH 02/28] Update README.md --- rfcs/proposed/zip_view/README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 2a1518746c0..5a0b635e7b5 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -13,9 +13,10 @@ which the same API and functionality as `std::ranges::zip_view`. ### Key Requirements -`oneapi::dpl::ranges::zip_view` should have: -- API compliance with `std::ranges::zip_view` -- `oneapi::dpl::__internal::tuple` underhood, due to `std::tuple` has issues with swapability and device copyability. +`oneapi::dpl::ranges::zip_view` should be: +- API compliant with `std::ranges::zip_view` +- device copyable itself +- the 'oneapi::dpl::ranges::zip_view::iterator' type should be value-swappable (https://en.cppreference.com/w/cpp/named_req/ValueSwappable) ### Performance From 761ecb7c540c28c6af15a7328c7ba190305870eb Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Fri, 29 Nov 2024 18:59:07 +0100 Subject: [PATCH 03/28] Update README.md --- rfcs/proposed/zip_view/README.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 5a0b635e7b5..de44627266a 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -11,16 +11,15 @@ useful for iterating over multiple collections in parallel. `std::ranges::zip_vi but there are many users who work with C++20 standard yet. So, oneDPL introduces `oneapi::dpl::ranges::zip_view`, which the same API and functionality as `std::ranges::zip_view`. - ### Key Requirements `oneapi::dpl::ranges::zip_view` should be: +- compilable with C++20 version (minimum) - API compliant with `std::ranges::zip_view` -- device copyable itself -- the 'oneapi::dpl::ranges::zip_view::iterator' type should be value-swappable (https://en.cppreference.com/w/cpp/named_req/ValueSwappable) - +- random accessable view; the "underlying" views also should be random accessable +- in case of a device usage: a device copyable view itself and the "underlying" views also should be device copyable +'oneapi::dpl::ranges::zip_view::iterator' type should be: +- value-swappable (https://en.cppreference.com/w/cpp/named_req/ValueSwappable) +- convertible `oneapi::dpl::zip_iterator` ### Performance -Combining `std::ranges::zip_view` with data pipelines and kernel fusion enables developers to write expressive, -efficient code for processing multiple related datasets. This approach not only simplifies the logic but also -optimizes performance, making it an essential technique in modern C++ development. Whether you're working with -simple transformations or complex data processing workflows, zip_view can be a valuable utility. +TBD From 7ef15f44defb3374f420cd87ac07fe2347059092 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Fri, 29 Nov 2024 19:01:22 +0100 Subject: [PATCH 04/28] Update README.md --- rfcs/proposed/zip_view/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index de44627266a..5cd558ed435 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -17,7 +17,8 @@ which the same API and functionality as `std::ranges::zip_view`. - API compliant with `std::ranges::zip_view` - random accessable view; the "underlying" views also should be random accessable - in case of a device usage: a device copyable view itself and the "underlying" views also should be device copyable -'oneapi::dpl::ranges::zip_view::iterator' type should be: + +`oneapi::dpl::ranges::zip_view::iterator` should be: - value-swappable (https://en.cppreference.com/w/cpp/named_req/ValueSwappable) - convertible `oneapi::dpl::zip_iterator` From e792b5be30ad95c54563cffe58bd5b79a58a544a Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Fri, 29 Nov 2024 19:17:55 +0100 Subject: [PATCH 05/28] Update README.md --- rfcs/proposed/zip_view/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 5cd558ed435..728f5db68b0 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -15,7 +15,7 @@ which the same API and functionality as `std::ranges::zip_view`. `oneapi::dpl::ranges::zip_view` should be: - compilable with C++20 version (minimum) - API compliant with `std::ranges::zip_view` -- random accessable view; the "underlying" views also should be random accessable +- random accessible view; the "underlying" views also should be random accessible - in case of a device usage: a device copyable view itself and the "underlying" views also should be device copyable `oneapi::dpl::ranges::zip_view::iterator` should be: From 786d5c5bf05f2340b9da8956cce227381096a146 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Fri, 29 Nov 2024 19:19:19 +0100 Subject: [PATCH 06/28] Update README.md --- rfcs/proposed/zip_view/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 728f5db68b0..644ecee0e77 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -20,7 +20,7 @@ which the same API and functionality as `std::ranges::zip_view`. `oneapi::dpl::ranges::zip_view::iterator` should be: - value-swappable (https://en.cppreference.com/w/cpp/named_req/ValueSwappable) -- convertible `oneapi::dpl::zip_iterator` +- convertible to `oneapi::dpl::zip_iterator` ### Performance TBD From 171e5fe91e4cc5ecc8e16352639a857d52c23881 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Fri, 29 Nov 2024 19:23:53 +0100 Subject: [PATCH 07/28] Update README.md --- rfcs/proposed/zip_view/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 644ecee0e77..6434077df7c 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -21,6 +21,7 @@ which the same API and functionality as `std::ranges::zip_view`. `oneapi::dpl::ranges::zip_view::iterator` should be: - value-swappable (https://en.cppreference.com/w/cpp/named_req/ValueSwappable) - convertible to `oneapi::dpl::zip_iterator` +- abble to use with the non-range algorithms ### Performance TBD From f9a2e45fa1e6bb322170c8a25d088f65300a9a9b Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Mon, 2 Dec 2024 18:17:01 +0100 Subject: [PATCH 08/28] [oneDPL][rfc][ranges][zip_view] + Implementation design proposal --- rfcs/experimental/zip_view/README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 rfcs/experimental/zip_view/README.md diff --git a/rfcs/experimental/zip_view/README.md b/rfcs/experimental/zip_view/README.md new file mode 100644 index 00000000000..37e6fabfb0a --- /dev/null +++ b/rfcs/experimental/zip_view/README.md @@ -0,0 +1,21 @@ +# Implementation design proposal + +## Introduction +According to proposed RFC document about `std::ranges::zip_view` a following implementation design is proposed here. + +## Implementation details +- `oneapi::dpl::ranges::zip_view` is designed as C++ class, which represents a range adaptor (see C++ Range Library). +This class encapsulate a tuple-like type to keep a combination of two or more ranges. +- The implementation provides all neccessary operators to satisfy 'random accessible view' requirement. +- To provide a device copyability requirement `oneapi::dpl::__internal::tuple` is proposed as tuple-like type underhood. +- To provide a value-swappable requirement `oneapi::dpl::__internal::tuple` is proposed as a dereferenced value for +`oneapi::dpl::ranges::zip_view::iterator`, due to the standard `std::tuple` C++20 is not swappable type. +- Usage of C++ concepts is desirable to write type requirements for types, methods and members of the class. +- C++20 is minimum supported version for the class. It allows to use modern C++ things like concepts and others. + +### Test coverage + +- `oneapi::dpl::ranges::zip_view` is tested itself, base functionality. +- should be tested with at least one oneDPL range based algorithm. +- should be tested with at least one oneDPL iterator based algorithm. + From 4a701fc6e1d3fae54926ffe54342c88df6709b94 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Tue, 3 Dec 2024 13:01:41 +0100 Subject: [PATCH 09/28] + spelling fix --- rfcs/experimental/zip_view/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/experimental/zip_view/README.md b/rfcs/experimental/zip_view/README.md index 37e6fabfb0a..19183ef5a1d 100644 --- a/rfcs/experimental/zip_view/README.md +++ b/rfcs/experimental/zip_view/README.md @@ -6,7 +6,7 @@ According to proposed RFC document about `std::ranges::zip_view` a following imp ## Implementation details - `oneapi::dpl::ranges::zip_view` is designed as C++ class, which represents a range adaptor (see C++ Range Library). This class encapsulate a tuple-like type to keep a combination of two or more ranges. -- The implementation provides all neccessary operators to satisfy 'random accessible view' requirement. +- The implementation provides all necessary operators to satisfy 'random accessible view' requirement. - To provide a device copyability requirement `oneapi::dpl::__internal::tuple` is proposed as tuple-like type underhood. - To provide a value-swappable requirement `oneapi::dpl::__internal::tuple` is proposed as a dereferenced value for `oneapi::dpl::ranges::zip_view::iterator`, due to the standard `std::tuple` C++20 is not swappable type. From cc3eac4009d7f79300fc62aa020a0194429a2b6a Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Tue, 3 Dec 2024 13:02:21 +0100 Subject: [PATCH 10/28] + spelling fix --- rfcs/experimental/zip_view/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/experimental/zip_view/README.md b/rfcs/experimental/zip_view/README.md index 19183ef5a1d..ce5ad312b27 100644 --- a/rfcs/experimental/zip_view/README.md +++ b/rfcs/experimental/zip_view/README.md @@ -5,7 +5,7 @@ According to proposed RFC document about `std::ranges::zip_view` a following imp ## Implementation details - `oneapi::dpl::ranges::zip_view` is designed as C++ class, which represents a range adaptor (see C++ Range Library). -This class encapsulate a tuple-like type to keep a combination of two or more ranges. +This class encapsulates a tuple-like type to keep a combination of two or more ranges. - The implementation provides all necessary operators to satisfy 'random accessible view' requirement. - To provide a device copyability requirement `oneapi::dpl::__internal::tuple` is proposed as tuple-like type underhood. - To provide a value-swappable requirement `oneapi::dpl::__internal::tuple` is proposed as a dereferenced value for From 52acfac5d4adc4055fa985f4a2a8cd47a855c17b Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Wed, 4 Dec 2024 14:24:37 +0100 Subject: [PATCH 11/28] +Implementation proposal --- rfcs/proposed/zip_view/README.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 6434077df7c..548b7e7acb5 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -23,5 +23,18 @@ which the same API and functionality as `std::ranges::zip_view`. - convertible to `oneapi::dpl::zip_iterator` - abble to use with the non-range algorithms -### Performance -TBD +#### Implementation proposal +- `oneapi::dpl::ranges::zip_view` is designed as C++ class, which represents a range adaptor (see C++ Range Library). +This class encapsulates a tuple-like type to keep a combination of two or more ranges. +- The implementation provides all necessary operators to satisfy 'random accessible view' requirement. +- To provide a device copyability requirement `oneapi::dpl::__internal::tuple` is proposed as tuple-like type underhood. +- To provide a value-swappable requirement `oneapi::dpl::__internal::tuple` is proposed as a dereferenced value for +`oneapi::dpl::ranges::zip_view::iterator`, due to the standard `std::tuple` C++20 is not swappable type. +- Usage of C++ concepts is desirable to write type requirements for types, methods and members of the class. +- C++20 is minimum supported version for the class. It allows to use modern C++ things like concepts and others. + +##### Test coverage + +- `oneapi::dpl::ranges::zip_view` is tested itself, base functionality. +- should be tested with at least one oneDPL range based algorithm. +- should be tested with at least one oneDPL iterator based algorithm. From 526a603bd6c5d84915bcd400d59f0bc917351abf Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Wed, 4 Dec 2024 14:24:59 +0100 Subject: [PATCH 12/28] Delete rfcs/experimental/zip_view/README.md --- rfcs/experimental/zip_view/README.md | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 rfcs/experimental/zip_view/README.md diff --git a/rfcs/experimental/zip_view/README.md b/rfcs/experimental/zip_view/README.md deleted file mode 100644 index ce5ad312b27..00000000000 --- a/rfcs/experimental/zip_view/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Implementation design proposal - -## Introduction -According to proposed RFC document about `std::ranges::zip_view` a following implementation design is proposed here. - -## Implementation details -- `oneapi::dpl::ranges::zip_view` is designed as C++ class, which represents a range adaptor (see C++ Range Library). -This class encapsulates a tuple-like type to keep a combination of two or more ranges. -- The implementation provides all necessary operators to satisfy 'random accessible view' requirement. -- To provide a device copyability requirement `oneapi::dpl::__internal::tuple` is proposed as tuple-like type underhood. -- To provide a value-swappable requirement `oneapi::dpl::__internal::tuple` is proposed as a dereferenced value for -`oneapi::dpl::ranges::zip_view::iterator`, due to the standard `std::tuple` C++20 is not swappable type. -- Usage of C++ concepts is desirable to write type requirements for types, methods and members of the class. -- C++20 is minimum supported version for the class. It allows to use modern C++ things like concepts and others. - -### Test coverage - -- `oneapi::dpl::ranges::zip_view` is tested itself, base functionality. -- should be tested with at least one oneDPL range based algorithm. -- should be tested with at least one oneDPL iterator based algorithm. - From 518aee007e75005e679e31dcb41c25a952ecba8b Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Wed, 4 Dec 2024 14:26:21 +0100 Subject: [PATCH 13/28] Update README.md --- rfcs/proposed/zip_view/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 548b7e7acb5..ecf1de4ea00 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -23,7 +23,7 @@ which the same API and functionality as `std::ranges::zip_view`. - convertible to `oneapi::dpl::zip_iterator` - abble to use with the non-range algorithms -#### Implementation proposal +### Implementation proposal - `oneapi::dpl::ranges::zip_view` is designed as C++ class, which represents a range adaptor (see C++ Range Library). This class encapsulates a tuple-like type to keep a combination of two or more ranges. - The implementation provides all necessary operators to satisfy 'random accessible view' requirement. @@ -33,7 +33,7 @@ This class encapsulates a tuple-like type to keep a combination of two or more r - Usage of C++ concepts is desirable to write type requirements for types, methods and members of the class. - C++20 is minimum supported version for the class. It allows to use modern C++ things like concepts and others. -##### Test coverage +### Test coverage - `oneapi::dpl::ranges::zip_view` is tested itself, base functionality. - should be tested with at least one oneDPL range based algorithm. From 234dbdb011f019884e26a03e280316ecc45ab790 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Tue, 17 Dec 2024 16:23:44 +0100 Subject: [PATCH 14/28] Update rfcs/proposed/zip_view/README.md Co-authored-by: Dmitriy Sobolev --- rfcs/proposed/zip_view/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index ecf1de4ea00..02550854c7d 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -1,7 +1,7 @@ # zip_view Support for the oneDPL Range APIs with C++20 ## Introduction -`std::ranges::zip_view` is powerful utility enables developers to combine two or more ranges into a single view, +`std::ranges::zip_view` is a powerful utility that enables developers to combine two or more ranges into a single view, where each element is represented as a tuple containing corresponding elements from each input range. ## Motivations From c20ef9f1999aacc187385dcd693d1bc6eeed04e8 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Tue, 17 Dec 2024 16:24:33 +0100 Subject: [PATCH 15/28] Update rfcs/proposed/zip_view/README.md Co-authored-by: Dmitriy Sobolev --- rfcs/proposed/zip_view/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 02550854c7d..7a05b1ae8ef 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -7,8 +7,8 @@ where each element is represented as a tuple containing corresponding elements f ## Motivations `std::ranges::zip_view` is a convenient way to combine multiple ranges into a single view, where each element of the resulting range is a tuple containing one element from each of the input ranges. This can be particularly -useful for iterating over multiple collections in parallel. `std::ranges::zip_view` is introduced starting with C++23, -but there are many users who work with C++20 standard yet. So, oneDPL introduces `oneapi::dpl::ranges::zip_view`, +useful for iterating over multiple collections in parallel. `std::ranges::zip_view` was introduced in C++23, +but many developers are still using C++20 standard. So, oneDPL introduces `oneapi::dpl::ranges::zip_view`, which the same API and functionality as `std::ranges::zip_view`. ### Key Requirements From aec760b2709098345d687508a6e5bff764cadbc2 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Tue, 17 Dec 2024 16:38:02 +0100 Subject: [PATCH 16/28] Update rfcs/proposed/zip_view/README.md Co-authored-by: Dmitriy Sobolev --- rfcs/proposed/zip_view/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 7a05b1ae8ef..974f1d31a92 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -29,7 +29,7 @@ This class encapsulates a tuple-like type to keep a combination of two or more r - The implementation provides all necessary operators to satisfy 'random accessible view' requirement. - To provide a device copyability requirement `oneapi::dpl::__internal::tuple` is proposed as tuple-like type underhood. - To provide a value-swappable requirement `oneapi::dpl::__internal::tuple` is proposed as a dereferenced value for -`oneapi::dpl::ranges::zip_view::iterator`, due to the standard `std::tuple` C++20 is not swappable type. +`oneapi::dpl::ranges::zip_view::iterator` due to `std::tuple` not satisfying the value-swappable requirement in C++20. - Usage of C++ concepts is desirable to write type requirements for types, methods and members of the class. - C++20 is minimum supported version for the class. It allows to use modern C++ things like concepts and others. From 9ab570b9f6c9280a4eefad02798a402acae73684 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Tue, 17 Dec 2024 16:41:05 +0100 Subject: [PATCH 17/28] Update rfcs/proposed/zip_view/README.md Co-authored-by: Dmitriy Sobolev --- rfcs/proposed/zip_view/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 974f1d31a92..e945cf5d982 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -9,7 +9,7 @@ where each element is represented as a tuple containing corresponding elements f the resulting range is a tuple containing one element from each of the input ranges. This can be particularly useful for iterating over multiple collections in parallel. `std::ranges::zip_view` was introduced in C++23, but many developers are still using C++20 standard. So, oneDPL introduces `oneapi::dpl::ranges::zip_view`, -which the same API and functionality as `std::ranges::zip_view`. +with the same API and functionality as `std::ranges::zip_view`. ### Key Requirements `oneapi::dpl::ranges::zip_view` should be: From 300e13c512b847be65dc5532f6e3b858184fa335 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Tue, 17 Dec 2024 16:44:38 +0100 Subject: [PATCH 18/28] Update rfcs/proposed/zip_view/README.md Co-authored-by: Dmitriy Sobolev --- rfcs/proposed/zip_view/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index e945cf5d982..5c6645d6dd4 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -24,7 +24,7 @@ with the same API and functionality as `std::ranges::zip_view`. - abble to use with the non-range algorithms ### Implementation proposal -- `oneapi::dpl::ranges::zip_view` is designed as C++ class, which represents a range adaptor (see C++ Range Library). +- `oneapi::dpl::ranges::zip_view` is designed as a C++ class which represents a range adaptor (see C++ Range Library). This class encapsulates a tuple-like type to keep a combination of two or more ranges. - The implementation provides all necessary operators to satisfy 'random accessible view' requirement. - To provide a device copyability requirement `oneapi::dpl::__internal::tuple` is proposed as tuple-like type underhood. From f51297e4916ad447e483b704c01a1a22f682dc38 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Tue, 17 Dec 2024 16:45:05 +0100 Subject: [PATCH 19/28] Update rfcs/proposed/zip_view/README.md Co-authored-by: Dmitriy Sobolev --- rfcs/proposed/zip_view/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 5c6645d6dd4..2ae5f60331e 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -14,7 +14,7 @@ with the same API and functionality as `std::ranges::zip_view`. ### Key Requirements `oneapi::dpl::ranges::zip_view` should be: - compilable with C++20 version (minimum) -- API compliant with `std::ranges::zip_view` +- API-compliant with `std::ranges::zip_view` - random accessible view; the "underlying" views also should be random accessible - in case of a device usage: a device copyable view itself and the "underlying" views also should be device copyable From 4cade93ddac52346afb2cef48caba504ba365a13 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Tue, 17 Dec 2024 16:46:24 +0100 Subject: [PATCH 20/28] Update rfcs/proposed/zip_view/README.md Co-authored-by: Dmitriy Sobolev --- rfcs/proposed/zip_view/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 2ae5f60331e..f7a86863c6e 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -21,7 +21,7 @@ with the same API and functionality as `std::ranges::zip_view`. `oneapi::dpl::ranges::zip_view::iterator` should be: - value-swappable (https://en.cppreference.com/w/cpp/named_req/ValueSwappable) - convertible to `oneapi::dpl::zip_iterator` -- abble to use with the non-range algorithms +- able to be used with the non-range algorithms ### Implementation proposal - `oneapi::dpl::ranges::zip_view` is designed as a C++ class which represents a range adaptor (see C++ Range Library). From 7b882fbe903d17c23ebad952712a87dda470f7c6 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Tue, 17 Dec 2024 16:46:51 +0100 Subject: [PATCH 21/28] Update rfcs/proposed/zip_view/README.md Co-authored-by: Dmitriy Sobolev --- rfcs/proposed/zip_view/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index f7a86863c6e..f18c5b2ad6b 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -31,7 +31,7 @@ This class encapsulates a tuple-like type to keep a combination of two or more r - To provide a value-swappable requirement `oneapi::dpl::__internal::tuple` is proposed as a dereferenced value for `oneapi::dpl::ranges::zip_view::iterator` due to `std::tuple` not satisfying the value-swappable requirement in C++20. - Usage of C++ concepts is desirable to write type requirements for types, methods and members of the class. -- C++20 is minimum supported version for the class. It allows to use modern C++ things like concepts and others. +- C++20 is minimum supported version for the class. It allows using modern C++ features such as concepts and others. ### Test coverage From 2e9c98db8d284408568c97710c8c517201220d71 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Tue, 17 Dec 2024 17:41:14 +0100 Subject: [PATCH 22/28] Update rfcs/proposed/zip_view/README.md Co-authored-by: Dmitriy Sobolev --- rfcs/proposed/zip_view/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index f18c5b2ad6b..5d2d4c42f55 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -27,7 +27,7 @@ with the same API and functionality as `std::ranges::zip_view`. - `oneapi::dpl::ranges::zip_view` is designed as a C++ class which represents a range adaptor (see C++ Range Library). This class encapsulates a tuple-like type to keep a combination of two or more ranges. - The implementation provides all necessary operators to satisfy 'random accessible view' requirement. -- To provide a device copyability requirement `oneapi::dpl::__internal::tuple` is proposed as tuple-like type underhood. +- To ensure device copyability, `oneapi::dpl::__internal::tuple` is proposed as a tuple-like type for underlying elements. - To provide a value-swappable requirement `oneapi::dpl::__internal::tuple` is proposed as a dereferenced value for `oneapi::dpl::ranges::zip_view::iterator` due to `std::tuple` not satisfying the value-swappable requirement in C++20. - Usage of C++ concepts is desirable to write type requirements for types, methods and members of the class. From 214dcde4a8ea3599c3cb24489d7cda4e6bf0c794 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Wed, 18 Dec 2024 13:59:04 +0100 Subject: [PATCH 23/28] Update rfcs/proposed/zip_view/README.md Co-authored-by: Dmitriy Sobolev --- rfcs/proposed/zip_view/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 5d2d4c42f55..6985b2e4caa 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -20,7 +20,7 @@ with the same API and functionality as `std::ranges::zip_view`. `oneapi::dpl::ranges::zip_view::iterator` should be: - value-swappable (https://en.cppreference.com/w/cpp/named_req/ValueSwappable) -- convertible to `oneapi::dpl::zip_iterator` +- implicitly convertible to `oneapi::dpl::zip_iterator` - able to be used with the non-range algorithms ### Implementation proposal From 1f7b13240e34bfab339c50d4f78f76459c1c4bf8 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Fri, 20 Dec 2024 18:16:02 +0100 Subject: [PATCH 24/28] Update README.md --- rfcs/proposed/zip_view/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 6985b2e4caa..08b3bb76d0d 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -16,7 +16,7 @@ with the same API and functionality as `std::ranges::zip_view`. - compilable with C++20 version (minimum) - API-compliant with `std::ranges::zip_view` - random accessible view; the "underlying" views also should be random accessible -- in case of a device usage: a device copyable view itself and the "underlying" views also should be device copyable +- in case of a device usage: a device copyable view if the all "underlying" views are device copyable views `oneapi::dpl::ranges::zip_view::iterator` should be: - value-swappable (https://en.cppreference.com/w/cpp/named_req/ValueSwappable) From 720f1d2e19158f671b982c45c9be052c3a6ed1db Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Wed, 15 Jan 2025 15:53:04 +0100 Subject: [PATCH 25/28] Update README.md --- rfcs/proposed/zip_view/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 08b3bb76d0d..62fe138c250 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -16,7 +16,8 @@ with the same API and functionality as `std::ranges::zip_view`. - compilable with C++20 version (minimum) - API-compliant with `std::ranges::zip_view` - random accessible view; the "underlying" views also should be random accessible -- in case of a device usage: a device copyable view if the all "underlying" views are device copyable views +- in case of a device usage: a device copyable view if the all "underlying" views are device copyable views. To provide a transitive device copyability oneapi::dpl::__internal::tuple is proposed as tuple-like type underhood. + `oneapi::dpl::ranges::zip_view::iterator` should be: - value-swappable (https://en.cppreference.com/w/cpp/named_req/ValueSwappable) From 416010b6610dfa3a928402452672818471ed9dfa Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Wed, 15 Jan 2025 17:40:02 +0100 Subject: [PATCH 26/28] Update README.md --- rfcs/proposed/zip_view/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 62fe138c250..457e2353f49 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -21,7 +21,6 @@ with the same API and functionality as `std::ranges::zip_view`. `oneapi::dpl::ranges::zip_view::iterator` should be: - value-swappable (https://en.cppreference.com/w/cpp/named_req/ValueSwappable) -- implicitly convertible to `oneapi::dpl::zip_iterator` - able to be used with the non-range algorithms ### Implementation proposal From 28aed7efff3b5fd0d69b06645152b8f7348e3d7d Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Wed, 15 Jan 2025 17:51:21 +0100 Subject: [PATCH 27/28] Update README.md --- rfcs/proposed/zip_view/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index 457e2353f49..ff4196df62c 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -35,6 +35,7 @@ This class encapsulates a tuple-like type to keep a combination of two or more r ### Test coverage -- `oneapi::dpl::ranges::zip_view` is tested itself, base functionality. +- `oneapi::dpl::ranges::zip_view` is tested itself, base functionality (the API that is used for a range in the oneDPL algorithm implementtaions) +- the base functionality test coverage may be extended by the adapted LLVM `std::ranges::zip_view` tests. - should be tested with at least one oneDPL range based algorithm. - should be tested with at least one oneDPL iterator based algorithm. From 1ce24071e3065c09a957c013944c234f2750fc61 Mon Sep 17 00:00:00 2001 From: MikeDvorskiy Date: Wed, 15 Jan 2025 17:53:41 +0100 Subject: [PATCH 28/28] Update README.md --- rfcs/proposed/zip_view/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rfcs/proposed/zip_view/README.md b/rfcs/proposed/zip_view/README.md index ff4196df62c..4a07d6c5e77 100644 --- a/rfcs/proposed/zip_view/README.md +++ b/rfcs/proposed/zip_view/README.md @@ -35,7 +35,7 @@ This class encapsulates a tuple-like type to keep a combination of two or more r ### Test coverage -- `oneapi::dpl::ranges::zip_view` is tested itself, base functionality (the API that is used for a range in the oneDPL algorithm implementtaions) +- `oneapi::dpl::ranges::zip_view` is tested itself, base functionality (the API that is used for a range in the oneDPL algorithm implementations) - the base functionality test coverage may be extended by the adapted LLVM `std::ranges::zip_view` tests. - should be tested with at least one oneDPL range based algorithm. - should be tested with at least one oneDPL iterator based algorithm.