Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
zbdk committed Jul 28, 2024
2 parents 0b7fd16 + 01cb107 commit 4a43d00
Show file tree
Hide file tree
Showing 27 changed files with 638 additions and 25 deletions.
9 changes: 8 additions & 1 deletion reference/deque/deque/op_constructor.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,13 @@ deque(deque&& y, const Allocator& a); // (9) C++11 から

deque(initializer_list<T> il,
const Allocator& a = Allocator()); // (10) C++11 から

template <container-compatible-range<T> R>
deque(from_range_t, R&& rg,
const Allocator& a = Allocator()); // (11) C++23 から
```
* initializer_list[link /reference/initializer_list/initializer_list.md]
* from_range_t[link ../../ranges/from_range_t.md]
## 概要
Expand All @@ -55,6 +60,7 @@ deque(initializer_list<T> il,
- (8) : コピーコンストラクタ。アロケータに `a` を使用して、`x` と同じ要素を保持した `deque` を構築する。
- (9) : ムーブコンストラクタ。アロケータに `a` を使用して、ムーブセマンティクスを使って `y` の要素でコンテナを構築する。
- (10) : 初期化子リストで要素を構築するコンストラクタ。`deque(il.`[`begin`](../../initializer_list/initializer_list/begin.md)`(), il.`[`end`](../../initializer_list/initializer_list/end.md)`(), a)` と等価。
- (11) : Rangeコンストラクタ。アロケータに `a` を使用して、`rg` の要素で `deque` を構築する。
## 計算量
Expand All @@ -68,7 +74,8 @@ deque(initializer_list<T> il,
- (7) : 定数時間
- (8) : `x` の要素数に対して線形時間
- (9) : `a == y.`[`get_allocator`](get_allocator.md)`()` の場合、定数時間、そうでなければ `y` の要素数に対して線形時間
- (10) : `il`の要素数に対して線形時間
- (10) : `il` の要素数に対して線形時間
- (11) : `rg` の要素数に対して線形時間
## 備考
Expand Down
7 changes: 7 additions & 0 deletions reference/forward_list/forward_list/op_constructor.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,13 @@ forward_list(forward_list&& x, const Allocator& a); // (9) C++11

forward_list(initializer_list<T> il,
const Allocator& a = Allocator()); // (10) C++11

template <container-compatible-range<T> R>
forward_list(from_range_t, R&& rg,
const Allocator& a = Allocator()); // (11) C++23
```
* initializer_list[link /reference/initializer_list/initializer_list.md]
* from_range_t[link ../../ranges/from_range_t.md]
## 概要
`forward_list`オブジェクトを、以下に示す通りの要素で初期化する。
Expand All @@ -53,6 +58,7 @@ forward_list(initializer_list<T> il,
- (8) : アロケータを指定したコピーコンストラクタ
- (9) : アロケータを指定したムーブコンストラクタ
- (10) : 初期化子リストを受け取るコンストラクタ。`forward_list(il.`[`begin`](../../initializer_list/initializer_list/begin.md)`(), il.`[`end`](../../initializer_list/initializer_list/end.md)`(), a)` と等価。
- (11) : Range `rg` の要素をコピーした `forward_list` オブジェクトを構築する。
## 計算量
Expand All @@ -65,6 +71,7 @@ forward_list(initializer_list<T> il,
- (8) : `x` の要素数に対して線形時間
- (9) : `x.`[`get_allocator`](get_allocator.md)`() == a` であれば、定数時間。そうでなければ `x` の要素数に対して線形時間
- (10) : `il` の要素数に対して線形時間
- (11) : `rg` の要素数に対して線形時間
## 備考
Expand Down
8 changes: 8 additions & 0 deletions reference/list/list/op_constructor.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,13 @@ list(list&& x, const Allocator& a); // (9) C++11 から

list(initializer_list<T> il,
const Allocator& a = Allocator()); // (10) C++11 から

template <container-compatible-range<T> R>
list(from_range_t, R&& rg,
const Allocator& a = Allocator()); // (11) C++23 から
```
* initializer_list[link /reference/initializer_list/initializer_list.md]
* from_range_t[link ../../ranges/from_range_t.md]
## 概要
Expand All @@ -48,6 +53,7 @@ list オブジェクトの構築
- (8) : アロケータを指定したコピーコンストラクタ。
- (9) : アロケータを指定したムーブコンストラクタ。
- (10) : 初期化子リストを受け取るコンストラクタ。`list(il.`[`begin`](../../initializer_list/initializer_list/begin.md)`(), il.`[`end`](../../initializer_list/initializer_list/end.md)`(), a)` と等価。
- (11) : Rangeコンストラクタ。Range `rg` の要素で `list` を構築する。
## 計算量
Expand All @@ -57,6 +63,8 @@ list オブジェクトの構築
- (6), (8) : `x.`[`size`](size.md)`()` に対して線形時間
- (7) : 定数時間
- (9) : `a == x.`[`get_allocator`](get_allocator.md)`()` であれば定数時間。そうでなければ `x.`[`size`](size.md)`()` に対して線形時間
- (10) : `il.`[`size`](../../initializer_list/initializer_list/size.md)`()` に対して線形時間
- (11) : [`ranges::distance`](../../iterator/ranges_distance.md)`(rg)` に対して線形時間
## 備考
Expand Down
17 changes: 15 additions & 2 deletions reference/map/map/op_constructor.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,18 @@ map(initializer_list<value_type> init,

map(initializer_list<value_type> init,
const Allocator& alloc); // (11) C++14 から

template <container-compatible-range <value_type> R>
map(from_range_t, R&& rg,
const Compare& comp = Compare(),
const Allocator& alloc = Allocator()); // (12) C++23 から

template <container-compatible-range <value_type> R>
map(from_range_t, R&& rg,
const Allocator& alloc); // (13) C++23 から
```
* initializer_list[link ../../initializer_list.md]
* from_range_t[link ../../ranges/from_range_t.md]
## 概要
`map` オブジェクトの構築
Expand All @@ -60,15 +70,18 @@ map(initializer_list<value_type> init,
- (9) アロケータ `alloc` を指定したムーブコンストラクタ。`y` の要素をムーブすることで `map` オブジェクトを構築する。(C++11 から)
- (10) 比較オブジェクト `comp`、アロケータ `alloc` 、および初期化リスト `init` の要素で `map` オブジェクトを構築する。`map(init.`[`begin`](../../initializer_list/initializer_list/begin.md)`(), init.`[`end`](../../initializer_list/initializer_list/end.md)`(), comp, alloc)` と等価。(C++11 から)
- (11) アロケータ `alloc` 、および初期化リスト `init` の要素で `map` オブジェクトを構築する。`map(init, Compare(), alloc)` と等価。(C++14 から)
- (12) Rangeコンストラクタ。比較オブジェクト `comp`、アロケータ `alloc` 、およびRange `rg` の要素で `map` オブジェクトを構築する。
- (13) Rangeコンストラクタ。アロケータ `alloc` 、およびRange `rg` の要素で `map` オブジェクトを構築する。
## 計算量
- (1)、(2)、(3) 定数時間
- (4)、(5) `N =` [`distance`](../../iterator/distance.md)`(first, last)` とすると、範囲 `[first, last)` が比較オブジェクト `comp` によって既にソート済みである場合は `N` に比例、そうでなければ `N log N` に比例
- (6)、(7) `x.`[`size`](size.md)`()` に対して線形時間
- (8) 定数時間
- (9) 定数時間。但し、`alloc == y.`[`get_allocator`](/reference/map/map/get_allocator.md)`()` でなければ `y.`[`size`](size.md)`()` に対して線形時間。
- (10)、(11) `init.`[`size`](size.md)`()` に対して線形時間。
- (9) 定数時間。但し、`alloc == y.`[`get_allocator`](/reference/map/map/get_allocator.md)`()` でなければ `y.`[`size`](size.md)`()` に対して線形時間
- (10)、(11) `N = init.`[`size`](../../initializer_list/initializer_list/size.md)`()` とすると、範囲 `[init.`[`begin`](../../initializer_list/initializer_list/begin.md)`(), init.`[`end`](../../initializer_list/initializer_list/end.md)`())` が比較オブジェクト `comp` によって既にソート済みである場合は `N` に比例、そうでなければ `N log N` に比例
- (12)、(13) `N =` [`ranges::distance`](../../iterator/ranges_distance.md)`(rg)` とすると、`rg` が比較オブジェクト `comp` によって既にソート済みである場合は `N` に比例、そうでなければ `N log N` に比例
## 備考
Expand Down
15 changes: 14 additions & 1 deletion reference/map/multimap/op_constructor.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,18 @@ multimap(initializer_list<value_type> init,

multimap(initializer_list<value_type> init,
const Allocator& alloc); // (11) C++14 から

template <container-compatible-range <value_type> R>
multimap(from_range_t, R&& rg,
const Compare& comp = Compare(),
const Allocator& alloc = Allocator()); // (12) C++23 から

template <container-compatible-range <value_type> R>
multimap(from_range_t, R&& rg,
const Allocator& alloc); // (13) C++23 から
```
* initializer_list[link ../../initializer_list.md]
* from_range_t[link ../../ranges/from_range_t.md]
## 概要
Expand All @@ -63,6 +73,8 @@ multimap(initializer_list<value_type> init,
- (9) アロケータ `alloc` を指定したムーブコンストラクタ。`y` の要素をムーブすることでコンテナを構築する。(C++11 から)
- (10) 比較オブジェクト `comp`、アロケータ `alloc`、および初期化リスト `init` の要素で `multimap` オブジェクトを構築する。`multimap(init.`[`begin`](../../initializer_list/initializer_list/begin.md)`, init.`[`end`](../../initializer_list/initializer_list/end.md)`, comp, alloc)` と等価。(C++11 から)
- (11) アロケータ `alloc`、および初期化リスト `init` の要素で `multimap` オブジェクトを構築する。`multimap(init, Compare(), alloc)` と等価。(C++14 から)
- (12) Rangeコンストラクタ。比較オブジェクト `comp`、アロケータ `alloc` 、およびRange `rg` の要素で `multimap` オブジェクトを構築する。
- (13) Rangeコンストラクタ。アロケータ `alloc` 、およびRange `rg` の要素で `multimap` オブジェクトを構築する。
## 計算量
Expand All @@ -71,7 +83,8 @@ multimap(initializer_list<value_type> init,
- (6)、(7) `x.`[`size`](size.md)`()` に対して線形時間
- (8) 定数時間
- (9) 定数時間。ただし、`alloc == y.`[`get_allocator`](get_allocator.md)`()` でなければ `y.`[`size`](size.md)`()` に対して線形時間
- (10)、(11) `init.`[`size`](size.md)`()` に対して線形時間
- (10)、(11) `N = init.`[`size`](../../initializer_list/initializer_list/size.md)`()` とすると、範囲 `[init.`[`begin`](../../initializer_list/initializer_list/begin.md)`(), init.`[`end`](../../initializer_list/initializer_list/end.md)`())` が比較オブジェクト `comp` によって既にソート済みである場合は `N` に比例、そうでなければ `N log N` に比例
- (12)、(13) `N =` [`ranges::distance`](../../iterator/ranges_distance.md)`(rg)` とすると、`rg` が比較オブジェクト `comp` によって既にソート済みである場合は `N` に比例、そうでなければ `N log N` に比例
## 備考
Expand Down
2 changes: 1 addition & 1 deletion reference/mdspan.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,4 @@
## 参照
- [P0009R18 MDSPAN](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0009r18.html)
- [P2630R4 Submdspan](https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2630r4.html)
- [P2642R5 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2642r5.html)
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
4 changes: 2 additions & 2 deletions reference/mdspan/LayoutMapping.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,8 @@ LayoutMappingを満たす型`M`は
- [`layout_left::mapping<E>`](layout_left/mapping.md)
- [`layout_right::mapping<E>`](layout_right/mapping.md)
- [`layout_stride::mapping<E>`](layout_stride/mapping.md)
- [`layout_left_padded<PV>::mapping<E>`](layout_left_padded/mapping.md.nolink)
- [`layout_right_padded<PV>::mapping<E>`](layout_right_padded/mapping.md.nolink)
- [`layout_left_padded<S>::mapping<E>`](layout_left_padded/mapping.md)
- [`layout_right_padded<S>::mapping<E>`](layout_right_padded/mapping.md)
- [`layout_blas_packed<T,SO>::mapping<E>`](/reference/linalg/layout_blas_packed/mapping.md)


Expand Down
4 changes: 2 additions & 2 deletions reference/mdspan/LayoutMappingPolicy.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ LayoutMappingPolicyを満たす型`MP`は
- [`layout_left`](layout_left.md)
- [`layout_right`](layout_right.md)
- [`layout_stride`](layout_stride.md)
- [`layout_left_padded<PV>`](layout_left_padded.md)
- [`layout_right_padded<PV>`](layout_right_padded.md)
- [`layout_left_padded<S>`](layout_left_padded.md)
- [`layout_right_padded<S>`](layout_right_padded.md)
- [`linalg::layout_blas_packed<T,SO>`](/reference/linalg/layout_blas_packed.md)
Expand Down
25 changes: 25 additions & 0 deletions reference/mdspan/is-layout-left-padded-mapping-of.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# is-layout-left-padded-mapping-of
* mdspan[meta header]
* variable[meta id-type]
* cpp26[meta cpp]

```cpp
template<class Mapping>
constexpr bool is-layout-left-padded-mapping-of = see below; // exposition only
```
* see below[italic]


## 概要
`is-layout-left-padded-mapping-of`は、[`layout_left_padded<S>::mapping`](layout_left_padded/mapping.md)を判定する説明専用変数テンプレートである。

`size_t`型の任意の値`S`として`Mapping`[`layout_left_padded<S>::mapping`](layout_left_padded/mapping.md)の特殊化であるときに限り、`is-layout-left-padded-mapping-of<Mapping>``true`となる。


## バージョン
### 言語
- C++26


## 参照
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
25 changes: 25 additions & 0 deletions reference/mdspan/is-layout-right-padded-mapping-of.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# is-layout-right-padded-mapping-of
* mdspan[meta header]
* variable[meta id-type]
* cpp26[meta cpp]

```cpp
template<class Mapping>
constexpr bool is-layout-right-padded-mapping-of = see below; // exposition only
```
* see below[italic]


## 概要
`is-layout-right-padded-mapping-of`は、[`layout_right_padded<S>::mapping`](layout_right_padded/mapping.md)を判定する説明専用変数テンプレートである。

`size_t`型の任意の値`S`として`Mapping`[`layout_right_padded<S>::mapping`](layout_right_padded/mapping.md)の特殊化であるときに限り、`is-layout-right-padded-mapping-of<Mapping>``true`となる。


## バージョン
### 言語
- C++26


## 参照
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
25 changes: 24 additions & 1 deletion reference/mdspan/layout_left/mapping/op_constructor.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,18 @@ template<class OtherExtents>
constexpr explicit(!is_convertible_v<OtherExtents, extents_type>)
mapping(const layout_right::mapping<OtherExtents>& other) noexcept; // (5)

template<class LayoutLeftPaddedMapping>
constexpr explicit(!is_convertible_v<typename LayoutLeftPaddedMapping::extents_type, extents_type>)
mapping(const LayoutLeftPaddedMapping& other) noexcept; // (7) C++26

template<class OtherExtents>
constexpr explicit(extents_type::rank() > 0)
mapping(const layout_stride::mapping<OtherExtents>& other) noexcept; // (6)
```
* is_convertible_v[link /reference/type_traits/is_convertible.md]
* rank()[link ../../extents/rank.md]
* layout_right::mapping[link ../../layout_right/mapping.md]
* LayoutLeftPaddedMapping[link ../../layout_left_padded/mapping.md]
* layout_stride::mapping[link ../../layout_stride/mapping.md]
## 概要
Expand All @@ -36,6 +41,7 @@ constexpr explicit(extents_type::rank() > 0)
- (4) : 他`layout_left::mapping`からの変換コンストラクタ
- (5) : [`layout_right::mapping`](../../layout_right/mapping.md)からの変換コンストラクタ
- (6) : [`layout_stride::mapping`](../../layout_stride/mapping.md)からの変換コンストラクタ
- (7) : [`layout_left_padded<S>::mapping`](../../layout_left_padded/mapping.md)からの変換コンストラクタ
## テンプレートパラメータ制約
Expand All @@ -44,6 +50,17 @@ constexpr explicit(extents_type::rank() > 0)
- `extents_type::`[`rank()`](../../extents/rank.md) `<= 1`、かつ
- [`is_constructible_v`](/reference/type_traits/is_constructible.md)`<extents_type, OtherExtents>`が`true`であること。
- (6) : [`is_constructible_v`](/reference/type_traits/is_constructible.md)`<extents_type, OtherExtents>`が`true`であること。
- (7) :
- [`is-layout-left-padded-mapping-of`](../../is-layout-left-padded-mapping-of.md)`<LayoutLeftPaddedMapping>`が`true`、かつ
- [`is_constructible_v`](/reference/type_traits/is_constructible.md)`<extents_type, typename LayoutLeftPaddedMapping::extents_type>`が`true`であること。
## 適格要件
- (7) : 以下を満たすとき、`extents_type::`[`static_extent`](../../extents/static_extent.md)`(0)`が`LayoutLeftPaddedMapping::padding_stride`の倍数であること。
- `extents_type::`[`rank()`](../../extents/rank.md) `> 1`、かつ
- `extents_type::`[`static_extent`](../../extents/static_extent.md)`(0)`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくなく、かつ
- `LayoutLeftPaddedMapping::extents_type::`[`static_extent`](../../extents/static_extent.md)`(0)`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくなく、かつ
- `LayoutLeftPaddedMapping::padding_stride`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくないこと。
## 事前条件
Expand All @@ -53,11 +70,14 @@ constexpr explicit(extents_type::rank() > 0)
- (6) :
- `extents_type::`[`rank()`](../../extents/rank.md) `> 0`のとき、`other`における全次元のストライド幅が[`layout_left::mapping`相当の制約](stride.md)をもつこと。
- `other.`[`required_span_size()`](../../layout_stride/mapping/required_span_size.md)を、`index_type`型で表現できること。
- (7) :
- `extents_type::`[`rank()`](../../extents/rank.md) `> 1`のとき、`other.stride(1) == other.extents(0)`
- `other.`[`required_span_size()`](../../layout_left_padded/mapping/required_span_size.md.nolink)を、`index_type`型で表現できること。
## 効果
- (3) : `e`を用いて`extents_`を直接非リスト初期化する。
- (4), (5), (6) : `other.extents()`を用いて`extents_`を直接非リスト初期化する。
- (4), (5), (6), (7) : `other.extents()`を用いて`extents_`を直接非リスト初期化する。
## 例外
Expand All @@ -67,6 +87,7 @@ constexpr explicit(extents_type::rank() > 0)
## explicitになる条件
- (4), (5) : `!`[`is_convertible_v`](/reference/type_traits/is_convertible.md)`<OtherExtents, extents_type>`
- (6) : [`extents_type::rank()`](../../extents/rank.md) `> 0`
- (7) : `!`[`is_convertible_v`](/reference/type_traits/is_convertible.md)`<typename LayoutLeftPaddedMapping::extents_type, extents_type>`
## 例
Expand Down Expand Up @@ -143,7 +164,9 @@ int main()
## 関連項目
- [`layout_right::mapping`](../../layout_right/mapping.md)
- [`layout_stride::mapping`](../../layout_stride/mapping.md)
- [`layout_left_padded::mapping`](../../layout_left_padded/mapping.md)


## 参照
- [P0009R18 MDSPAN](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0009r18.html)
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
6 changes: 3 additions & 3 deletions reference/mdspan/layout_left_padded.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace std {
```
* dynamic_extent[link /reference/span/dynamic_extent.md]
* Extents[link extents.md]
* mapping[link layout_left_padded/mapping.md.nolink]
* mapping[link layout_left_padded/mapping.md]
## 概要
`layout_left_padded`は、多次元配列ビュー[`mdspan`](mdspan.md)に対して、パディングあり列優先(column major)[レイアウトマッピング](LayoutMapping.md)を表現するポリシークラスである。
Expand All @@ -29,7 +29,7 @@ namespace std {
| 名前 | 説明 | 対応バージョン |
|------|------|----------------|
| [`mapping`](layout_left_padded/mapping.md.nolink) | レイアウトマッピング | C++26 |
| [`mapping`](layout_left_padded/mapping.md) | レイアウトマッピング | C++26 |
## 例
Expand Down Expand Up @@ -83,4 +83,4 @@ int main()


## 参照
- [P2642R5 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2642r5.html)
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
Loading

0 comments on commit 4a43d00

Please sign in to comment.