Skip to content
Open
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
1807a42
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde May 8, 2024
e14469b
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde May 8, 2024
85ca069
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde May 8, 2024
b031c38
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde May 8, 2024
32b68f2
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde May 8, 2024
8e35609
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde May 8, 2024
162ce8a
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde May 8, 2024
9dd983d
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde May 8, 2024
8291917
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde May 14, 2024
c1fc9cb
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde May 15, 2024
176b313
[libc++] implement 'std::generator'
xiaoyang-sde May 15, 2024
652f44f
[libc++] implement 'std::generator'
xiaoyang-sde May 15, 2024
9748a32
[libc++] implement 'std::generator'
xiaoyang-sde May 15, 2024
457f78c
[libc++] implement 'std::generator'
xiaoyang-sde May 16, 2024
c72c94d
[libc++] implement 'std::generator'
xiaoyang-sde May 18, 2024
cba0548
[libc++] implement 'std::generator'
xiaoyang-sde May 18, 2024
66280fb
[libc++] implement 'std::generator'
xiaoyang-sde May 18, 2024
0bb72da
[libc++] implement 'std::generator'
xiaoyang-sde May 18, 2024
07a7db6
[libc++] implement 'std::generator'
xiaoyang-sde May 20, 2024
30a1e6e
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Jul 28, 2024
b741665
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Jul 28, 2024
1c4122f
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 8, 2024
07a62fe
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 8, 2024
74bd185
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 8, 2024
5e37e03
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 8, 2024
cd3b4cd
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 8, 2024
bfb0e25
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 8, 2024
aacbc6b
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 8, 2024
ffc9700
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 8, 2024
4c72a3a
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 9, 2024
c2df436
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 9, 2024
5884764
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 9, 2024
752d590
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 9, 2024
93c65aa
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 13, 2024
b564478
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 18, 2024
94b9c2c
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 18, 2024
06f28a1
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Aug 28, 2024
89a36ef
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Oct 8, 2024
68a3e3f
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Oct 17, 2024
ea82cce
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Oct 17, 2024
03ccc54
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Nov 10, 2024
5ca6002
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Nov 10, 2024
2e11e43
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Nov 10, 2024
f717f55
[libc++][ranges] implement 'ranges::elements_of'
xiaoyang-sde Dec 1, 2024
e45f69c
[libc++] implement 'std::generator'
xiaoyang-sde Dec 1, 2024
0587a50
[libc++] implement 'std::generator'
xiaoyang-sde Dec 1, 2024
b5414ce
[libc++] implement 'std::generator'
xiaoyang-sde Dec 1, 2024
b3d5992
[libc++] implement 'std::generator'
xiaoyang-sde Dec 1, 2024
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
2 changes: 2 additions & 0 deletions libcxx/include/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -647,6 +647,7 @@ set(files
__ranges/data.h
__ranges/drop_view.h
__ranges/drop_while_view.h
__ranges/elements_of.h
__ranges/elements_view.h
__ranges/empty.h
__ranges/empty_view.h
Expand Down Expand Up @@ -950,6 +951,7 @@ set(files
fstream
functional
future
generator
initializer_list
inttypes.h
iomanip
Expand Down
55 changes: 55 additions & 0 deletions libcxx/include/__ranges/elements_of.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// -*- C++ -*-
//===----------------------------------------------------------------------===//
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review note, elements_of is #91414.

//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef _LIBCPP___RANGES_ELEMENTS_OF_H
#define _LIBCPP___RANGES_ELEMENTS_OF_H

#include <__config>
#include <__memory/allocator.h>
#include <__ranges/concepts.h>
#include <__utility/move.h>
#include <cstddef>

#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif

_LIBCPP_PUSH_MACROS
#include <__undef_macros>

_LIBCPP_BEGIN_NAMESPACE_STD

#if _LIBCPP_STD_VER >= 23

namespace ranges {

template <range _Range, class _Allocator = allocator<byte>>
struct elements_of {
_LIBCPP_NO_UNIQUE_ADDRESS _Range range;
_LIBCPP_NO_UNIQUE_ADDRESS _Allocator allocator;

// This explicit constructor is required because AppleClang 15 hasn't implement P0960R3
_LIBCPP_HIDE_FROM_ABI explicit constexpr elements_of(_Range __range, _Allocator __alloc = _Allocator())
: range(std::move(__range)), allocator(std::move(__alloc)) {}
};

template <class _Range, class _Allocator = allocator<byte>>
// This explicit constraint is required because AppleClang 15 might not deduce the correct type for `_Range` without it
requires range<_Range&&>
elements_of(_Range&&, _Allocator = _Allocator()) -> elements_of<_Range&&, _Allocator>;

} // namespace ranges

#endif // _LIBCPP_STD_VER >= 23

_LIBCPP_END_NAMESPACE_STD

_LIBCPP_POP_MACROS

#endif // _LIBCPP___RANGES_ELEMENTS_OF_H
1 change: 1 addition & 0 deletions libcxx/include/__std_clang_module
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@
#if !defined(_LIBCPP_HAS_NO_THREADS)
# include <future>
#endif
#include <generator>
#include <initializer_list>
#include <inttypes.h>
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
Expand Down
Loading