Sequoia
Loading...
Searching...
No Matches
HeterogeneousStaticGraph.hpp
Go to the documentation of this file.
1
2// Copyright Oliver J. Rosten 2018. //
3// Distributed under the GNU GENERAL PUBLIC LICENSE, Version 3.0. //
4// (See accompanying file LICENSE.md or copy at //
5// https://www.gnu.org/licenses/gpl-3.0.en.html) //
7
8#pragma once
9
18
19#include <tuple>
20
21namespace sequoia::maths
22{
23 template
24 <
25 std::size_t Size,
26 std::size_t Order,
27 class EdgeWeight,
28 class... NodeWeights
29 >
30 class heterogeneous_directed_graph final : public
32 <
33 connectivity<graph_flavour::directed, graph_impl::edge_storage_generator_t<graph_flavour::directed, EdgeWeight, null_meta_data, typename static_edge_storage_config<graph_flavour::directed, Size, Order>::index_type, static_edge_storage_config<graph_flavour::directed, Size, Order>>>,
34 heterogeneous_node_storage<NodeWeights...>
35 >
36 {
37 private:
38 using primitive_type =
40 <
42 heterogeneous_node_storage<NodeWeights...>
43 >;
44
45 public:
46 static_assert(sizeof...(NodeWeights) == Order);
47
48 constexpr static graph_flavour flavour{graph_flavour::directed};
49
50 [[nodiscard]]
51 constexpr static std::size_t order() noexcept { return Order; }
52
53 [[nodiscard]]
54 constexpr static std::size_t size() noexcept { return Size; }
55
56 using
58 <
60 heterogeneous_node_storage<NodeWeights...>
61 >::graph_primitive;
62
63 using primitive_type::set_edge_weight;
64 using primitive_type::mutate_edge_weight;
65 using primitive_type::sort_edges;
66 using primitive_type::stable_sort_edges;
67 using primitive_type::swap_edges;
68 };
69
70 template
71 <
72 std::size_t Size,
73 std::size_t Order,
74 class EdgeWeight,
75 class EdgeMetaData,
76 class... NodeWeights
77 >
78 class heterogeneous_undirected_graph final : public
80 <
81 connectivity<graph_flavour::undirected, graph_impl::edge_storage_generator_t<graph_flavour::undirected, EdgeWeight, EdgeMetaData, typename static_edge_storage_config<graph_flavour::undirected, Size, Order>::index_type, static_edge_storage_config<graph_flavour::undirected, Size, Order>>>,
82 heterogeneous_node_storage<NodeWeights...>
83 >
84 {
85 private:
86 using primitive_type =
88 <
90 heterogeneous_node_storage<NodeWeights...>
91 >;
92
93 public:
94 static_assert(sizeof...(NodeWeights) == Order);
95
96 constexpr static graph_flavour flavour{graph_flavour::undirected};
97
98 [[nodiscard]]
99 constexpr static std::size_t order() noexcept { return Order; }
100
101 [[nodiscard]]
102 constexpr static std::size_t size() noexcept { return Size; }
103
104 using
106 <
108 heterogeneous_node_storage<NodeWeights...>
109 >::graph_primitive;
110
111 using primitive_type::set_edge_weight;
112 using primitive_type::mutate_edge_weight;
113 using primitive_type::sort_edges;
114 using primitive_type::stable_sort_edges;
115 using primitive_type::swap_edges;
116 };
117
118 template
119 <
120 std::size_t Size,
121 std::size_t Order,
122 class EdgeWeight,
123 class EdgeMetaData,
124 class... NodeWeights
125 >
126 class heterogeneous_embedded_graph final : public
128 <
129 connectivity<graph_flavour::undirected_embedded, graph_impl::edge_storage_generator_t<graph_flavour::undirected_embedded, EdgeWeight, EdgeMetaData, typename static_edge_storage_config<graph_flavour::undirected_embedded, Size, Order>::index_type, static_edge_storage_config<graph_flavour::undirected_embedded, Size, Order>>>,
130 heterogeneous_node_storage<NodeWeights...>
131 >
132 {
133 private:
134 using primitive_type =
136 <
138 heterogeneous_node_storage<NodeWeights...>
139 >;
140
141 public:
142 static_assert(sizeof...(NodeWeights) == Order);
143
144 constexpr static graph_flavour flavour{graph_flavour::undirected_embedded};
145
146 constexpr static std::size_t order() noexcept { return Order; }
147
148 constexpr static std::size_t size() noexcept { return Size; }
149
150 using
152 <
154 heterogeneous_node_storage<NodeWeights...>
155 >::graph_primitive;
156
157 using primitive_type::set_edge_weight;
158 using primitive_type::mutate_edge_weight;
159 };
160}
Underlying class for the various different graph flavour.
Node storage for graphs with heterogeneous node weights.
Edge configuration for static graphs.
Definition: Connectivity.hpp:1641
Definition: GraphPrimitive.hpp:107
Definition: HeterogeneousStaticGraph.hpp:36
Definition: HeterogeneousStaticGraph.hpp:132
Definition: HeterogeneousNodeStorage.hpp:27
Definition: HeterogeneousStaticGraph.hpp:84
Definition: StaticGraphConfig.hpp:20