Skip to content

Commit d105f23

Browse files
committed
layout-based definition of incidence-list
1 parent c5d8e93 commit d105f23

10 files changed

Lines changed: 843 additions & 822 deletions

include/hgl/hypergraph_traits.hpp

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@
77
#include "directional_tags.hpp"
88
#include "hypergraph_elements.hpp"
99
#include "impl/impl_tags.hpp"
10+
#include "impl/layout_tags.hpp"
1011

1112
namespace hgl {
1213

1314
template <
1415
type_traits::c_hypergraph_directional_tag DirectionalTag = undirected_t,
1516
type_traits::c_properties VertexProperties = types::empty_properties,
1617
type_traits::c_properties HyperedgeProperties = types::empty_properties,
17-
type_traits::c_hypergraph_impl_tag ImplTag = impl::hyperedge_list_t>
18+
type_traits::c_hypergraph_impl_tag ImplTag = impl::list_t<impl::hyperedge_major_t>>
1819
struct hypergraph_traits {
1920
using directional_tag = DirectionalTag;
2021
using implementation_tag = ImplTag;
@@ -27,64 +28,57 @@ struct hypergraph_traits {
2728
};
2829

2930
template <
31+
type_traits::c_hypergraph_layout_tag LayoutTag = impl::hyperedge_major_t,
3032
type_traits::c_hypergraph_directional_tag DirectionalTag = undirected_t,
3133
type_traits::c_properties VertexProperties = types::empty_properties,
3234
type_traits::c_properties HyperedgeProperties = types::empty_properties>
33-
using hyperedge_list_hg_traits =
34-
hypergraph_traits<DirectionalTag, VertexProperties, HyperedgeProperties, impl::hyperedge_list_t>;
35+
using list_hypergraph_traits =
36+
hypergraph_traits<DirectionalTag, VertexProperties, HyperedgeProperties, impl::list_t<LayoutTag>>;
3537

3638
template <
39+
type_traits::c_hypergraph_layout_tag LayoutTag = impl::hyperedge_major_t,
3740
type_traits::c_hypergraph_directional_tag DirectionalTag = undirected_t,
3841
type_traits::c_properties VertexProperties = types::empty_properties,
3942
type_traits::c_properties HyperedgeProperties = types::empty_properties>
40-
using vertex_list_hg_traits =
41-
hypergraph_traits<DirectionalTag, VertexProperties, HyperedgeProperties, impl::vertex_list_t>;
42-
43-
template <
44-
type_traits::c_hypergraph_directional_tag DirectionalTag = undirected_t,
45-
type_traits::c_properties VertexProperties = types::empty_properties,
46-
type_traits::c_properties HyperedgeProperties = types::empty_properties>
47-
using incidence_matrix_hg_traits =
48-
hypergraph_traits<DirectionalTag, VertexProperties, HyperedgeProperties, impl::incidence_matrix_t>;
43+
using matrix_hypergraph_traits = hypergraph_traits<
44+
DirectionalTag,
45+
VertexProperties,
46+
HyperedgeProperties,
47+
impl::matrix_t<LayoutTag>>;
4948

5049
template <
5150
type_traits::c_properties VertexProperties = types::empty_properties,
5251
type_traits::c_properties HyperedgeProperties = types::empty_properties,
53-
type_traits::c_hypergraph_impl_tag ImplTag = impl::hyperedge_list_t>
54-
using undirected_hg_traits =
52+
type_traits::c_hypergraph_impl_tag ImplTag = impl::list_t<impl::hyperedge_major_t>>
53+
using undirected_hypergraph_traits =
5554
hypergraph_traits<undirected_t, VertexProperties, HyperedgeProperties, ImplTag>;
5655

5756
template <
5857
type_traits::c_properties VertexProperties = types::empty_properties,
5958
type_traits::c_properties HyperedgeProperties = types::empty_properties,
60-
type_traits::c_hypergraph_impl_tag ImplTag = impl::hyperedge_list_t>
61-
using bf_directed_hg_traits =
59+
type_traits::c_hypergraph_impl_tag ImplTag = impl::list_t<impl::hyperedge_major_t>>
60+
using bf_directed_hypergraph_traits =
6261
hypergraph_traits<bf_directed_t, VertexProperties, HyperedgeProperties, ImplTag>;
6362

6463
namespace type_traits {
6564

6665
template <typename TraitsType>
67-
concept c_hyperedge_list_hg_traits =
68-
c_instantiation_of<TraitsType, hypergraph_traits>
69-
and std::same_as<typename TraitsType::implementation_tag, impl::hyperedge_list_t>;
70-
71-
template <typename TraitsType>
72-
concept c_vertex_list_hg_traits =
66+
concept c_list_hypergraph_traits =
7367
c_instantiation_of<TraitsType, hypergraph_traits>
74-
and std::same_as<typename TraitsType::implementation_tag, impl::vertex_list_t>;
68+
and c_hypergraph_list_impl<typename TraitsType::implementation_tag>;
7569

7670
template <typename TraitsType>
77-
concept c_incidence_matrix_hg_traits =
71+
concept c_matrix_hypergraph_traits =
7872
c_instantiation_of<TraitsType, hypergraph_traits>
79-
and std::same_as<typename TraitsType::implementation_tag, impl::incidence_matrix_t>;
73+
and c_hypergraph_matrix_impl<typename TraitsType::implementation_tag>;
8074

8175
template <typename TraitsType>
82-
concept c_undirected_hg_traits =
76+
concept c_undirected_hypergraph_traits =
8377
c_instantiation_of<TraitsType, hypergraph_traits>
8478
and std::same_as<typename TraitsType::hyperedge_directional_tag, undirected_t>;
8579

8680
template <typename TraitsType>
87-
concept c_bf_directed_hg_traits =
81+
concept c_bf_directed_hypergraph_traits =
8882
c_instantiation_of<TraitsType, hypergraph_traits>
8983
and std::same_as<typename TraitsType::hyperedge_directional_tag, bf_directed_t>;
9084

include/hgl/impl/hyperedge_list.hpp

Lines changed: 0 additions & 143 deletions
This file was deleted.

include/hgl/impl/impl_tags.hpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,35 @@
55
#pragma once
66

77
#include "hgl/types/type_traits.hpp"
8+
#include "hgl/types/types.hpp"
9+
#include "layout_tags.hpp"
810

911
namespace hgl {
1012

1113
namespace impl {
1214

13-
struct hyperedge_list_t {};
15+
template <type_traits::c_hypergraph_layout_tag LayoutTag>
16+
struct list_t {
17+
using layout_tag = LayoutTag;
18+
};
1419

15-
struct vertex_list_t {};
16-
17-
struct incidence_matrix_t {};
20+
template <type_traits::c_hypergraph_layout_tag LayoutTag>
21+
struct matrix_t {
22+
using layout_tag = LayoutTag;
23+
};
1824

1925
} // namespace impl
2026

2127
namespace type_traits {
2228

2329
template <typename T>
24-
concept c_hypergraph_impl_tag =
25-
c_one_of<T, impl::hyperedge_list_t, impl::vertex_list_t, impl::incidence_matrix_t>;
30+
concept c_hypergraph_list_impl = c_instantiation_of<T, impl::list_t>;
31+
32+
template <typename T>
33+
concept c_hypergraph_matrix_impl = c_instantiation_of<T, impl::matrix_t>;
34+
35+
template <typename T>
36+
concept c_hypergraph_impl_tag = c_hypergraph_list_impl<T> or c_hypergraph_matrix_impl<T>;
2637

2738
} // namespace type_traits
2839

0 commit comments

Comments
 (0)