Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
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
48 changes: 21 additions & 27 deletions include/hgl/hypergraph_traits.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@
#include "directional_tags.hpp"
#include "hypergraph_elements.hpp"
#include "impl/impl_tags.hpp"
#include "impl/layout_tags.hpp"

namespace hgl {

template <
type_traits::c_hypergraph_directional_tag DirectionalTag = undirected_t,
type_traits::c_properties VertexProperties = types::empty_properties,
type_traits::c_properties HyperedgeProperties = types::empty_properties,
type_traits::c_hypergraph_impl_tag ImplTag = impl::hyperedge_list_t>
type_traits::c_hypergraph_impl_tag ImplTag = impl::list_t<impl::hyperedge_major_t>>
struct hypergraph_traits {
using directional_tag = DirectionalTag;
using implementation_tag = ImplTag;
Expand All @@ -27,64 +28,57 @@ struct hypergraph_traits {
};

template <
type_traits::c_hypergraph_layout_tag LayoutTag = impl::hyperedge_major_t,
type_traits::c_hypergraph_directional_tag DirectionalTag = undirected_t,
type_traits::c_properties VertexProperties = types::empty_properties,
type_traits::c_properties HyperedgeProperties = types::empty_properties>
using hyperedge_list_hg_traits =
hypergraph_traits<DirectionalTag, VertexProperties, HyperedgeProperties, impl::hyperedge_list_t>;
using list_hypergraph_traits =
hypergraph_traits<DirectionalTag, VertexProperties, HyperedgeProperties, impl::list_t<LayoutTag>>;

template <
type_traits::c_hypergraph_layout_tag LayoutTag = impl::hyperedge_major_t,
type_traits::c_hypergraph_directional_tag DirectionalTag = undirected_t,
type_traits::c_properties VertexProperties = types::empty_properties,
type_traits::c_properties HyperedgeProperties = types::empty_properties>
using vertex_list_hg_traits =
hypergraph_traits<DirectionalTag, VertexProperties, HyperedgeProperties, impl::vertex_list_t>;

template <
type_traits::c_hypergraph_directional_tag DirectionalTag = undirected_t,
type_traits::c_properties VertexProperties = types::empty_properties,
type_traits::c_properties HyperedgeProperties = types::empty_properties>
using incidence_matrix_hg_traits =
hypergraph_traits<DirectionalTag, VertexProperties, HyperedgeProperties, impl::incidence_matrix_t>;
using matrix_hypergraph_traits = hypergraph_traits<
DirectionalTag,
VertexProperties,
HyperedgeProperties,
impl::matrix_t<LayoutTag>>;

template <
type_traits::c_properties VertexProperties = types::empty_properties,
type_traits::c_properties HyperedgeProperties = types::empty_properties,
type_traits::c_hypergraph_impl_tag ImplTag = impl::hyperedge_list_t>
using undirected_hg_traits =
type_traits::c_hypergraph_impl_tag ImplTag = impl::list_t<impl::hyperedge_major_t>>
using undirected_hypergraph_traits =
hypergraph_traits<undirected_t, VertexProperties, HyperedgeProperties, ImplTag>;

template <
type_traits::c_properties VertexProperties = types::empty_properties,
type_traits::c_properties HyperedgeProperties = types::empty_properties,
type_traits::c_hypergraph_impl_tag ImplTag = impl::hyperedge_list_t>
using bf_directed_hg_traits =
type_traits::c_hypergraph_impl_tag ImplTag = impl::list_t<impl::hyperedge_major_t>>
using bf_directed_hypergraph_traits =
hypergraph_traits<bf_directed_t, VertexProperties, HyperedgeProperties, ImplTag>;

namespace type_traits {

template <typename TraitsType>
concept c_hyperedge_list_hg_traits =
c_instantiation_of<TraitsType, hypergraph_traits>
and std::same_as<typename TraitsType::implementation_tag, impl::hyperedge_list_t>;

template <typename TraitsType>
concept c_vertex_list_hg_traits =
concept c_list_hypergraph_traits =
c_instantiation_of<TraitsType, hypergraph_traits>
and std::same_as<typename TraitsType::implementation_tag, impl::vertex_list_t>;
and c_hypergraph_list_impl<typename TraitsType::implementation_tag>;

template <typename TraitsType>
concept c_incidence_matrix_hg_traits =
concept c_matrix_hypergraph_traits =
c_instantiation_of<TraitsType, hypergraph_traits>
and std::same_as<typename TraitsType::implementation_tag, impl::incidence_matrix_t>;
and c_hypergraph_matrix_impl<typename TraitsType::implementation_tag>;

template <typename TraitsType>
concept c_undirected_hg_traits =
concept c_undirected_hypergraph_traits =
c_instantiation_of<TraitsType, hypergraph_traits>
and std::same_as<typename TraitsType::hyperedge_directional_tag, undirected_t>;

template <typename TraitsType>
concept c_bf_directed_hg_traits =
concept c_bf_directed_hypergraph_traits =
c_instantiation_of<TraitsType, hypergraph_traits>
and std::same_as<typename TraitsType::hyperedge_directional_tag, bf_directed_t>;

Expand Down
143 changes: 0 additions & 143 deletions include/hgl/impl/hyperedge_list.hpp

This file was deleted.

23 changes: 17 additions & 6 deletions include/hgl/impl/impl_tags.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,35 @@
#pragma once

#include "hgl/types/type_traits.hpp"
#include "hgl/types/types.hpp"
#include "layout_tags.hpp"

namespace hgl {

namespace impl {

struct hyperedge_list_t {};
template <type_traits::c_hypergraph_layout_tag LayoutTag>
struct list_t {
using layout_tag = LayoutTag;
};

struct vertex_list_t {};

struct incidence_matrix_t {};
template <type_traits::c_hypergraph_layout_tag LayoutTag>
struct matrix_t {
using layout_tag = LayoutTag;
};

} // namespace impl

namespace type_traits {

template <typename T>
concept c_hypergraph_impl_tag =
c_one_of<T, impl::hyperedge_list_t, impl::vertex_list_t, impl::incidence_matrix_t>;
concept c_hypergraph_list_impl = c_instantiation_of<T, impl::list_t>;

template <typename T>
concept c_hypergraph_matrix_impl = c_instantiation_of<T, impl::matrix_t>;

template <typename T>
concept c_hypergraph_impl_tag = c_hypergraph_list_impl<T> or c_hypergraph_matrix_impl<T>;

} // namespace type_traits

Expand Down
Loading