Skip to content

Commit ec26ff0

Browse files
committed
docs: more CPOs
1 parent 2f2f9e1 commit ec26ff0

File tree

1 file changed

+58
-2
lines changed

1 file changed

+58
-2
lines changed

doc/reference/customization_points.md

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ We also use its return type to determine the type of the vertex: `vertex_t<G>`.
4848

4949
### `vertex_id`
5050

51-
The CPO `vertex_id(g, ui)` is used obtain the _id_ of the vertex, given the iterator.
51+
The CPO `vertex_id(g, ui)` is used obtain the _id_ of the vertex, given the iterator. <br>
5252
We also use its return type to determine the type of the vertex id: `vertex_id_t<G>`.
5353

54-
#### Coustomization
54+
#### Customization
5555

5656
1. Returns `ui->vertex_id(g)`, if this expression is valid and its type is `std::move_constructible`.
5757
2. Returns `vertex_id(g, ui)`, if this expression is valid and its type is `std::move_constructible`.
@@ -67,22 +67,78 @@ We also use its return type to determine the type of the vertex id: `vertex_id_t
6767

6868
TODO `find_vertex(g, uid)`
6969

70+
7071
### `edges(g, u)`
7172

73+
The CPO `edges(g, u)` is used to obtain the sequence of outgoing edges for a vertex
74+
denoted by reference `u`. <br>
75+
We also use its return type to determine the type of the edge type: `edge_t<G>`.
76+
77+
#### Customization
78+
79+
1. Returns `u.edges(g)`, if this expression is valid and its type is `std::move_constructible`.
80+
2. Returns `edges(g, u)`, if this expression is valid and its type is `std::move_constructible`.
81+
3. `u`, if `G` is a user-defined type and type `vertex_t<G>` is `std::ranges::forward_range;
82+
83+
7284
### `edges(g, uid)`
7385

86+
The CPO `edges(g, uid)` is used to obtain the sequence of outgoing edges for a vertex
87+
denoted by _id_ `uid`.
88+
89+
#### Customization
90+
91+
1. Returns `edges(g, uid)`, if this expression is valid and its type is `std::move_constructible`.
92+
2. Returns `*find_vertex(g, uid)`, if
93+
* `vertex_t<G>` is `std::ranges::forward_range`, and
94+
* expression `find_vertex(g, uid)` is valid and its type is `std::move_constructible`.
95+
96+
7497
### `num_edges(g)`
7598

99+
TODO
100+
101+
76102
### `target_id(g, uv)`
77103

104+
The CPO `target_id(g, uv)` is used to obtain the _id_ of the target vertex of edge `uv`.
105+
106+
#### Customization
107+
108+
1. Returns `uv.target_id(g)`, if this expression is valid and its type is `std::move_constructible`.
109+
2. Returns `target_id(g, uv)`, if this expression is valid and its type is `std::move_constructible`.
110+
3. Returns `uv`, if
111+
* `G` is `std::ranges::forward_range`, and
112+
* `std::ranges::range_value_t<G>` is `std::ranges::forward_range`, and
113+
* `std::ranges::range_value_t<std::ranges::range_value_t<G>>` is `std::integral`.
114+
4. Returns `get<0>(uv)`, if
115+
* `G` is `std::ranges::forward_range`, and
116+
* `std::ranges::range_value_t<G>` is `std::ranges::forward_range`, and
117+
* `std::ranges::range_value_t<std::ranges::range_value_t<G>>` is <code><em>tuple-like</em></code>,
118+
* `std::tuple_element_t<0, std::ranges::range_value_t<std::ranges::range_value_t<G>>>` is `std::integral`.
119+
120+
78121
### `target_id(e)`
79122

80123
### `source_id(g, uv)`
81124

82125
### `source_id(e)`
83126

127+
84128
### `target(g, uv)`
85129

130+
CPO `target(g, uv)` is used to access the target vertex of a given edge `uv`.
131+
132+
#### Customization
133+
134+
1. Returns `target(g, uv)`, if this expression is valid and its type is `std::move_constructible`.
135+
2. Returns `*find_vertex(g, target_id(g, uv))`, if
136+
137+
* `vertex_range_t<G>` is a `std::ranges::random_access_range`, and
138+
* `find_vertex(g, uid)` is valid and its type is `std::move_constructible`, and
139+
* `target_id(g, uv)` is valid and its type is `std::integral`.
140+
141+
86142
### `source(g, uv)`
87143

88144
### `find_vertex_edge(g, u, vid)`

0 commit comments

Comments
 (0)