@@ -1333,101 +1333,6 @@ inline namespace _Cpos {
1333
1333
}
1334
1334
1335
1335
1336
- //
1337
- // edge_id(g,uv) -> edge_id_t<G>
1338
- // default = edge_id_t<G>(source_id(g,uv),target_id(g,uv))
1339
- //
1340
- // edge_id_t<G> = edge_descriptor<vertex_id_t<_G>, true, void, void>
1341
- //
1342
- template <class _G >
1343
- using edge_id_t = edge_descriptor<vertex_id_t <_G>, true , void , void >; // {source_id, target_id}
1344
-
1345
- namespace _Edge_id {
1346
- # if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1681199
1347
- void edge_id () = delete; // Block unqualified name lookup
1348
- # else // ^^^ no workaround / workaround vvv
1349
- void edge_id ();
1350
- # endif // ^^^ workaround ^^^
1351
-
1352
- template <class _G >
1353
- concept _Has_ref_member = requires(_G&& __g, edge_reference_t <_G> uv) {
1354
- { uv.edge_id (__g) } -> convertible_to<edge_id_t <_G>>;
1355
- };
1356
- template <class _G >
1357
- concept _Has_ref_ADL = _Has_class_or_enum_type<_G> //
1358
- && requires(_G&& __g, const edge_reference_t <_G>& uv) {
1359
- { _Fake_copy_init (edge_id (__g, uv)) } -> convertible_to<edge_id_t <_G>>; // intentional ADL
1360
- };
1361
-
1362
- template <class _G >
1363
- concept _Can_id_eval = _Has_class_or_enum_type<_G> //
1364
- && requires(_G&& __g, edge_reference_t <_G> uv) {
1365
- { _Fake_copy_init (edge_id_t <_G>{source_id (__g, uv), target_id (__g, uv)}) };
1366
- };
1367
- class _Cpo {
1368
- private:
1369
- enum class _St_ref { _None, _Member, _Non_member, _Auto_eval };
1370
-
1371
- template <class _G >
1372
- [[nodiscard]] static consteval _Choice_t<_St_ref> _Choose_ref () noexcept {
1373
- static_assert (is_lvalue_reference_v<_G>);
1374
- if constexpr (_Has_ref_member<_G>) {
1375
- return {_St_ref::_Member, noexcept (_Fake_copy_init (declval<edge_reference_t <_G>>().edge_id (declval<_G>())))};
1376
- } else if constexpr (_Has_ref_ADL<_G>) {
1377
- return {_St_ref::_Non_member,
1378
- noexcept (_Fake_copy_init (edge_id (declval<_G>(), declval<edge_reference_t <_G>>())))}; // intentional ADL
1379
- } else if constexpr (_Can_id_eval<_G>) {
1380
- return {_St_ref::_Auto_eval,
1381
- noexcept (_Fake_copy_init (edge_id_t <_G>{source_id (declval<_G>(), declval<edge_reference_t <_G>>()),
1382
- target_id (declval<_G>(), declval<edge_reference_t <_G>>())}))};
1383
- } else {
1384
- return {_St_ref::_None};
1385
- }
1386
- }
1387
-
1388
- template <class _G >
1389
- static constexpr _Choice_t<_St_ref> _Choice_ref = _Choose_ref<_G>();
1390
-
1391
- public:
1392
- /* *
1393
- * @brief The id of an edge, made from its source_id and target_id.
1394
- *
1395
- * Complexity: O(1)
1396
- *
1397
- * Default implementation:
1398
- * edge_descriptor<vertex_id_t<G>,true>{source_id(g,uv), target_id(g,uv)}
1399
- * given that source_id(g,uv) is defined.
1400
- *
1401
- * @tparam G The graph type.
1402
- * @param g A graph instance.
1403
- * @param uv An edge reference.
1404
- * @return An edge_descriptor with the source_id and target_id.
1405
- */
1406
- template <class _G >
1407
- requires (_Choice_ref<_G&>._Strategy != _St_ref::_None)
1408
- [[nodiscard]] constexpr auto operator ()(_G&& __g, edge_reference_t <_G> uv) const
1409
- noexcept (_Choice_ref<_G&>._No_throw) {
1410
- constexpr _St_ref _Strat_ref = _Choice_ref<_G&>._Strategy ;
1411
-
1412
- if constexpr (_Strat_ref == _St_ref::_Member) {
1413
- return uv.edge_id (__g);
1414
- } else if constexpr (_Strat_ref == _St_ref::_Non_member) {
1415
- return edge_id (__g, uv); // intentional ADL
1416
- } else if constexpr (_Strat_ref == _St_ref::_Auto_eval) {
1417
- return edge_id_t <_G>{source_id (__g, uv), target_id (__g, uv)};
1418
- } else {
1419
- static_assert (_Always_false<_G>,
1420
- " edge_id(g,uv) is not defined, or target_id(g,uv) and source_id(g,uv) are not defined" );
1421
- }
1422
- }
1423
- };
1424
- } // namespace _Edge_id
1425
-
1426
- inline namespace _Cpos {
1427
- inline constexpr _Edge_id::_Cpo edge_id;
1428
- }
1429
-
1430
-
1431
1336
//
1432
1337
// find_vertex_edge(g,u,vid) -> vertex_edge_iterator<G>
1433
1338
// default = find(edges(g,u), [](uv) {target_id(g,uv)==vid;}
0 commit comments