forked from OSchip/llvm-project
[libc++][docs] Add status docs for ranges.
The added documents have two tables: 1 containing links to issues and papers related to ranges. And the other contains most of the sections from the One Ranges Proposal, with their dependencies linked. This will allow us to assign work that can be done in parallel. Differential Revision: https://reviews.llvm.org/D100393
This commit is contained in:
parent
0148bf53f0
commit
0f0149b8d3
|
@ -0,0 +1,61 @@
|
|||
Section,Description,Dependencies,Asignee,Patch,Complete
|
||||
[concepts],"Normally this would be more fine-grained, but it’s already been implemented.",,Christopher Di Bella,,✅
|
||||
[tuple.helper],Update <tuple> includes.,,,,
|
||||
[function.objects],"Comparison functions: equal_to, less, etc.",[concepts],Zoe Carver,D100429,
|
||||
[memory.syn],Add specializations for uninitialized_* and destroy_*. ,"[concepts], [readable.traits]: iter_value_t",,,
|
||||
[readable.traits]: indirectly_readable_traits,indirectly_readable_traits only. ,[concepts],Christopher Di Bella,D99461,
|
||||
[iterator.traits],Mainly updates to iterator_traits.,"[readable.traits]: indirectly_readable_traits, [concepts]",Christopher Di Bella,"D99854, D99855",
|
||||
[readable.traits]: iter_value_t,Finish implementing readable.traits.,"[readable.traits]: indirectly_readable_traits, [concepts], [iterator.traits]",Christopher Di Bella,D99863,
|
||||
[specialized.algorithms],NOT FINISHED,NOT FINISHED,,,
|
||||
[strings],Adds begin/end and updates const_iterator.,[iterator.concepts],,,
|
||||
[views.span],Same as [strings],[iterator.concepts],,,
|
||||
[incrementable.traits],,[concepts],Christopher Di Bella,"D99141, D99863",1/2
|
||||
[iterator.cust.move],Implement iter_move.,,Christopher Di Bella,D99873,
|
||||
[iterator.cust.swap],Implement iter_swap.,"[concepts], [readable.traits]: iter_value_t",,,
|
||||
[iterator.concepts],"indirectly_readable, indirectly_writable, weakly_incrementable, incrementable, input_or_output_iterator, sentinel_for, sized_sentinel_for, input_iterator, output_iterator, forward_iterator, bidirectional_iterator, random_access_iterator, and contiguous_iterator.","[concepts], [readable.traits]: iter_value_t, [iterator.traits]",Christopher Di Bella,"indirectly_readable: D100073
|
||||
indirectly_wriatable: D100078 weakly_incrementable, incrementable: D100080 input_or_output_iterator, sentinel_for: D100160
|
||||
input_iterator: D100271
|
||||
forward_iterator: D100275
|
||||
bidirectional_iterator: D100278",
|
||||
[indirectcallable.indirectinvocable],"indirectly_unary_invocable, indirectly_regular_unary_invocable, indirectly_unary_predicate, indirectly_binary_predicate, indirectly_equivalence_relation, and indirectly_strict_weak_order.","[concepts], [readable.traits]: iter_value_t, [iterator.traits]",,,
|
||||
[projected],,[iterator.concepts],,,
|
||||
[common.alg.req]: pt. 1,"indirectly_movable, indirectly_movable_sorable, indirectly_copyable, and indirectly_copyable_storable.",[iterator.concepts],,,
|
||||
[common.alg.req]: pt. 2,indirectly_swappable,"[iterator.concepts], [iterator.cust.swap]",,,
|
||||
[common.alg.req]: pt. 3,indirectly_comparable,[projected],,,
|
||||
[common.alg.req]: pt. 4,"Note: could be done with pt. 1. … permutable, mergeable, and sortable",[iterator.concepts],,,
|
||||
[std.iterator.tags],,[iterator.traits],,,
|
||||
[range.iterator.opearations.advance],ranges::advance,[iterator.concepts],,,
|
||||
[range.iterator.opearations.distance],ranges::distance,"[iterator.concepts], [range.range]",,,
|
||||
[range.iterator.opearations.next],ranges::next,[iterator.concepts],,,
|
||||
[range.iterator.opearations.prev],ranges::prev,[iterator.concepts],,,
|
||||
[predef.iterators],Updates to predefined iterators.,"[iterator.concepts], [iterator.cust.swap], [iterator.cust.move]",,,
|
||||
[move.sentinel],,[concepts] … Note: for testing it may be beneficial to have completed [predef.iterators]. ,,,
|
||||
[common.iterator],,"[iterator.concepts], [iterator.cust.swap], [iterator.cust.move]",,,
|
||||
[default.sentinels],The empty std::default_sentinel_t.,,,,
|
||||
[counted.iterator],,"[iterator.concepts], [iterator.cust.swap], [iterator.cust.move], [default.sentinels]",,,
|
||||
[stream.iterators],,[default.sentinels],,,
|
||||
[ranges.syn]: pt. 1,All the stuff not specified elsewhere. ,"[range.access], [iterator.concepts], [range.all], [range.subrange], unreachable, [range.empty]",,,
|
||||
[ranges.syn]: pt. 2,"iterator_t, sentinel_t, and safe_iterator_t",[range.access],Christopher Di Bella,"D100255, D100269",
|
||||
[range.access],"ranges::begin, end, cbegin, cend, rbegin, rend, crbegin, and crend",[iterator.concepts],Christopher Di Bella,D100255,
|
||||
[ranges.primitives],"size, empty, data, and cdata",[iterator.concepts],,,
|
||||
[range.range],,[range.access],,,
|
||||
[range.sized],,"[range.primitives], [range.range]",,,
|
||||
[range.view],View and enable_view,[range.range],,,
|
||||
[range.refinements],"OutputRange, InputRange, ForwardRange, BidirectionalRange, RandomAccessRange, ContiguousRange, CommonRange, ViewableRange","[ranges.syn]: pt. 2, [range.range]",Christopher Di Bella,"input_range: D100271
|
||||
forward_range: D100275
|
||||
bidirectional_range: D100278",
|
||||
[view.interface],[range.utility.helpers] and view_interface,"[ranges.syn]: pt. 2, [range.view], [range.iterator.opearations.prev], [range.refinements]",,,
|
||||
[range.subrange],,[view.interface],,,
|
||||
[range.all],view::all,"[range.subrange], [range.view.ref]",,,
|
||||
[range.view.ref],ref-view,[view.interface],,,
|
||||
[range.filter],filter_view,[range.all],,,
|
||||
[range.transform],transform_view,[range.all],,,
|
||||
[range.iota],iota_view,[range.all],,,
|
||||
[range.take],take_view,[range.all],,,
|
||||
[range.join],join_view,[range.all],,,
|
||||
[range.empty],empty_view,[view.interface],,,
|
||||
[range.single],single_view,[view.interface],,,
|
||||
[range.split],split_view,[range.all],,,
|
||||
[range.counted],view::counted,[range.subrange],,,
|
||||
[range.common],common_view,[range.all],,,
|
||||
[range.reverse],reverse_view,[range.all],,,
|
|
|
@ -0,0 +1,59 @@
|
|||
"Number","Name","Status","Assignee"
|
||||
`P0896R4 <https://wg21.link/P0896R4>`__,<ranges>,,
|
||||
`P1035R7 <https://wg21.link/P1035R7>`__,Input Range Adaptors,,
|
||||
`P1207R4 <https://wg21.link/P1207R4>`__,Movability Of Single-Pass Iterators,,
|
||||
`P1243R4 <https://wg21.link/P1243R4>`__,Rangify New Algorithms,,
|
||||
`P1248R1 <https://wg21.link/P1248R1>`__,Fixing Relations,,
|
||||
`P1252R2 <https://wg21.link/P1252R2>`__,Ranges Design Cleanup,,
|
||||
`P1391R4 <https://wg21.link/P1391R4>`__,Range Constructor For string_view,,
|
||||
`P1456R1 <https://wg21.link/P1456R1>`__,Move-Only Views,,
|
||||
`P1474R1 <https://wg21.link/P1474R1>`__,Helpful Pointers For contiguous_iterator,,
|
||||
`P1522R1 <https://wg21.link/P1522R1>`__,Iterator Difference Type And Integer Overflow,,
|
||||
`P1523R1 <https://wg21.link/P1523R1>`__,Views And Size Types,,
|
||||
`P1638R1 <https://wg21.link/P1638R1>`__,basic_istream_view::iterator Should Not Be Copyable,,
|
||||
`P1716R3 <https://wg21.link/P1716R3>`__,Range Comparison Algorithms Are Over-Constrained,,
|
||||
`P1739R4 <https://wg21.link/P1739R4>`__,Avoiding Template Bloat For Ranges,,
|
||||
`P1862R1 <https://wg21.link/P1862R1>`__,Range Adaptors For Non-Copyable Iterators,,
|
||||
`P1870R1 <https://wg21.link/P1870R1>`__,safe_range,,
|
||||
`P1871R1 <https://wg21.link/P1871R1>`__,disable_sized_sentinel_for,,
|
||||
`P1878R1 <https://wg21.link/P1878R1>`__,Constraining Readable Types,,
|
||||
`P1970R2 <https://wg21.link/P1970R2>`__,ranges::ssize,,
|
||||
`P1983R0 <https://wg21.link/P1983R0>`__,Fixing Minor Ranges Issues,,
|
||||
`P1994R1 <https://wg21.link/P1994R1>`__,elements_view Needs Its Own sentinel,,
|
||||
`P2091R0 <https://wg21.link/P2091R0>`__,Fixing Issues With Range Access CPOs,,
|
||||
`P2106R0 <https://wg21.link/P2106R0>`__,Range Algorithm Result Types,,
|
||||
`LWG-3169 <https://wg21.link/LWG-3169>`__, ranges permutation generators discard useful information,,
|
||||
`LWG-3173 <https://wg21.link/LWG-3173>`__, Enable CTAD for ref-view,,
|
||||
`LWG-3179 <https://wg21.link/LWG-3179>`__, subrange should always model Range,,
|
||||
`LWG-3180 <https://wg21.link/LWG-3180>`__, Inconsistently named return type for ranges::minmax_element,,
|
||||
`LWG-3183 <https://wg21.link/LWG-3183>`__, Normative permission to specialize Ranges variable templates,,
|
||||
`LWG-3186 <https://wg21.link/LWG-3186>`__," ranges removal, partition, and partial_sort_copy algorithms discard useful information",,
|
||||
`LWG-3191 <https://wg21.link/LWG-3191>`__, std::ranges::shuffle synopsis does not match algorithm definition,,
|
||||
`LWG-3276 <https://wg21.link/LWG-3276>`__, Class split_view::outer_iterator::value_type should inherit from view_interface,,
|
||||
`LWG-3280 <https://wg21.link/LWG-3280>`__, View converting constructors can cause constraint recursion and are unneeded,,
|
||||
`LWG-3281 <https://wg21.link/LWG-3281>`__, Conversion from pair-like types to subrange is a silent semantic promotion,,
|
||||
`LWG-3282 <https://wg21.link/LWG-3282>`__, subrange converting constructor should disallow derived to base conversions,,
|
||||
`LWG-3286 <https://wg21.link/LWG-3286>`__, ranges::size is not required to be valid after a call to ranges::begin on an input range,,
|
||||
`LWG-3291 <https://wg21.link/LWG-3291>`__, iota_view::iterator has the wrong iterator_category,,
|
||||
`LWG-3292 <https://wg21.link/LWG-3292>`__, iota_view is under-constrained,,
|
||||
`LWG-3299 <https://wg21.link/LWG-3299>`__, Pointers don't need customized iterator behavior,,
|
||||
`LWG-3301 <https://wg21.link/LWG-3301>`__, transform_view::iterator has incorrect iterator_category,,
|
||||
`LWG-3302 <https://wg21.link/LWG-3302>`__, Range adaptor objects keys and values are unspecified,,
|
||||
`LWG-3313 <https://wg21.link/LWG-3313>`__, join_view::iterator::operator-- is incorrectly constrained,,
|
||||
`LWG-3323 <https://wg21.link/LWG-3323>`__, has-tuple-element helper concept needs convertible_to,,
|
||||
`LWG-3325 <https://wg21.link/LWG-3325>`__, Constrain return type of transformation function for transform_view,,
|
||||
`LWG-3335 <https://wg21.link/LWG-3335>`__, range_size_t and views::all_t,,
|
||||
`LWG-3355 <https://wg21.link/LWG-3355>`__, The memory algorithms should support move-only input iterators introduced by P1207,,
|
||||
`LWG-3363 <https://wg21.link/LWG-3363>`__, drop_while_view should opt-out of sized_range,,
|
||||
`LWG-3364 <https://wg21.link/LWG-3364>`__, Initialize data members of ranges and their iterators,,
|
||||
`LWG-3381 <https://wg21.link/LWG-3381>`__, begin and data must agree for contiguous_range,,
|
||||
`LWG-3384 <https://wg21.link/LWG-3384>`__, transform_view::sentinel has an incorrect operator-,,
|
||||
`LWG-3385 <https://wg21.link/LWG-3385>`__, common_iterator is not sufficiently constrained for non-copyable iterators,,
|
||||
`LWG-3387 <https://wg21.link/LWG-3387>`__, [range.reverse.view] reverse_view<V> unintentionally requires range<const V>,,
|
||||
`LWG-3388 <https://wg21.link/LWG-3388>`__, view iterator types have ill-formed <=> operators,,
|
||||
`LWG-3389 <https://wg21.link/LWG-3389>`__, A move-only iterator still does not have a counted_iterator,,
|
||||
`LWG-3397 <https://wg21.link/LWG-3397>`__, ranges::basic_istream_view::iterator should not provide iterator_category,,
|
||||
`LWG-3398 <https://wg21.link/LWG-3398>`__, tuple_element_t is also wrong for const subrange,,
|
||||
`LWG-3474 <https://wg21.link/LWG-3474>`__, Nesting join_views is broken because of CTAD,,
|
||||
`LWG-3500 <https://wg21.link/LWG-3500>`__, join_view::iterator::operator->() is bogus,,
|
||||
`LWG-3505 <https://wg21.link/LWG-3505>`__, split_view::outer-iterator::operator++ misspecified,,
|
|
|
@ -0,0 +1,51 @@
|
|||
.. ranges-status:
|
||||
|
||||
================================
|
||||
libc++ Ranges Status
|
||||
================================
|
||||
|
||||
.. include:: Helpers/Styles.rst
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
|
||||
Overview
|
||||
================================
|
||||
|
||||
This document contains the status of the C++20 Ranges library in libc++. It is used to
|
||||
track both the status of the sub-projects of the ranges library and who is assigned to
|
||||
these sub-projects. This is imperative to effective implementation so that work is not
|
||||
duplicated and implementors are not blocked by each other.
|
||||
|
||||
If you are interested in contributing to the libc++ Ranges library, please send a message
|
||||
to the #libcxx channel in the LLVM discord. Please *do not* start working on any of the
|
||||
assigned items below.
|
||||
|
||||
|
||||
Sub-Projects in the One Ranges Proposal
|
||||
=======================================
|
||||
|
||||
.. csv-table::
|
||||
:file: OneRangesProposalStatus.csv
|
||||
:header-rows: 1
|
||||
:widths: auto
|
||||
|
||||
|
||||
Misc. Items and TODOs
|
||||
====================================
|
||||
|
||||
(Note: files with required updates will contain the TODO at the begining of the list item
|
||||
so they can be easily found via global search.)
|
||||
|
||||
* TODO(XX_SPACESHIP_CONCEPTS): when spaceship support is added to various STL types, we need to update some concept tests.
|
||||
|
||||
Paper and Issue Status
|
||||
====================================
|
||||
|
||||
(Note: stolen from MSVC `here <https://github.com/microsoft/STL/issues/39>`_.)
|
||||
|
||||
.. csv-table::
|
||||
:file: RangesIssuePaperStatus.csv
|
||||
:header-rows: 1
|
||||
:widths: auto
|
|
@ -43,6 +43,7 @@ Getting Started with libc++
|
|||
Cxx1zStatus
|
||||
Cxx2aStatus
|
||||
Cxx2bStatus
|
||||
RangesStatus
|
||||
|
||||
|
||||
.. toctree::
|
||||
|
|
Loading…
Reference in New Issue