Skip to content

Commit 077f892

Browse files
committed
merge both concepts to one
Signed-off-by: Nitish Bharambe <[email protected]>
1 parent 0711e10 commit 077f892

File tree

3 files changed

+22
-26
lines changed

3 files changed

+22
-26
lines changed

power_grid_model_c/power_grid_model/include/power_grid_model/container_fwd.hpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,15 @@
1010

1111
namespace power_grid_model::common {
1212

13-
template <typename ContainerType, typename RetrievableType>
14-
concept component_container_c = requires(ContainerType const& c, ID id, Idx2D idx2d) {
13+
template <typename ContainerType, typename... RetrievableType>
14+
concept component_container_c = (requires(ContainerType const& c, ID id, Idx2D idx2d) {
1515
{ c.template citer<RetrievableType>().begin() } -> std::forward_iterator;
1616
{ c.template citer<RetrievableType>().end() } -> std::forward_iterator;
1717
{ *(c.template citer<RetrievableType>().begin()) } -> std::same_as<RetrievableType const&>;
1818
{ *(c.template citer<RetrievableType>().end()) } -> std::same_as<RetrievableType const&>;
1919
{ c.template get_item<RetrievableType>(id) } -> std::convertible_to<RetrievableType const&>;
2020
{ c.template size<RetrievableType>() } -> std::same_as<Idx>;
2121
{ c.template get_seq<RetrievableType>(idx2d) } -> std::same_as<Idx>;
22-
};
23-
24-
template <typename ContainerType, typename... RetrievableType>
25-
concept multi_component_container_c = (component_container_c<ContainerType, RetrievableType> && ...);
22+
} && ...);
2623

2724
} // namespace power_grid_model::common

power_grid_model_c/power_grid_model/include/power_grid_model/main_core/topology.hpp

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ constexpr void register_topology_components(ComponentContainer const& components
3131
}
3232

3333
template <std::same_as<Branch> Component, class ComponentContainer>
34-
requires common::multi_component_container_c<ComponentContainer, Component, Node>
34+
requires common::component_container_c<ComponentContainer, Component, Node>
3535
constexpr void register_topology_components(ComponentContainer const& components, ComponentTopology& comp_topo) {
3636
apply_registration<Component>(components, comp_topo.branch_node_idx, [&components](Branch const& branch) {
3737
return BranchIdx{get_component_sequence_idx<Node>(components, branch.from_node()),
@@ -40,7 +40,7 @@ constexpr void register_topology_components(ComponentContainer const& components
4040
}
4141

4242
template <std::same_as<Branch3> Component, class ComponentContainer>
43-
requires common::multi_component_container_c<ComponentContainer, Component, Node>
43+
requires common::component_container_c<ComponentContainer, Component, Node>
4444
constexpr void register_topology_components(ComponentContainer const& components, ComponentTopology& comp_topo) {
4545
apply_registration<Component>(components, comp_topo.branch3_node_idx, [&components](Branch3 const& branch3) {
4646
return Branch3Idx{get_component_sequence_idx<Node>(components, branch3.node_1()),
@@ -50,23 +50,23 @@ constexpr void register_topology_components(ComponentContainer const& components
5050
}
5151

5252
template <std::same_as<Source> Component, class ComponentContainer>
53-
requires common::multi_component_container_c<ComponentContainer, Component, Node>
53+
requires common::component_container_c<ComponentContainer, Component, Node>
5454
constexpr void register_topology_components(ComponentContainer const& components, ComponentTopology& comp_topo) {
5555
apply_registration<Component>(components, comp_topo.source_node_idx, [&components](Source const& source) {
5656
return get_component_sequence_idx<Node>(components, source.node());
5757
});
5858
}
5959

6060
template <std::same_as<Shunt> Component, class ComponentContainer>
61-
requires common::multi_component_container_c<ComponentContainer, Component, Node>
61+
requires common::component_container_c<ComponentContainer, Component, Node>
6262
constexpr void register_topology_components(ComponentContainer const& components, ComponentTopology& comp_topo) {
6363
apply_registration<Component>(components, comp_topo.shunt_node_idx, [&components](Shunt const& shunt) {
6464
return get_component_sequence_idx<Node>(components, shunt.node());
6565
});
6666
}
6767

6868
template <std::same_as<GenericLoadGen> Component, class ComponentContainer>
69-
requires common::multi_component_container_c<ComponentContainer, Component, Node>
69+
requires common::component_container_c<ComponentContainer, Component, Node>
7070
constexpr void register_topology_components(ComponentContainer const& components, ComponentTopology& comp_topo) {
7171
apply_registration<Component>(components, comp_topo.load_gen_node_idx,
7272
[&components](GenericLoadGen const& load_gen) {
@@ -78,7 +78,7 @@ constexpr void register_topology_components(ComponentContainer const& components
7878
}
7979

8080
template <std::same_as<GenericVoltageSensor> Component, class ComponentContainer>
81-
requires common::multi_component_container_c<ComponentContainer, Component, Node>
81+
requires common::component_container_c<ComponentContainer, Component, Node>
8282
constexpr void register_topology_components(ComponentContainer const& components, ComponentTopology& comp_topo) {
8383
apply_registration<Component>(
8484
components, comp_topo.voltage_sensor_node_idx, [&components](GenericVoltageSensor const& voltage_sensor) {
@@ -87,8 +87,8 @@ constexpr void register_topology_components(ComponentContainer const& components
8787
}
8888

8989
template <std::same_as<GenericPowerSensor> Component, class ComponentContainer>
90-
requires common::multi_component_container_c<ComponentContainer, Component, Branch, Source, Shunt, GenericLoadGen,
91-
Branch3, Node>
90+
requires common::component_container_c<ComponentContainer, Component, Branch, Source, Shunt, GenericLoadGen,
91+
Branch3, Node>
9292
constexpr void register_topology_components(ComponentContainer const& components, ComponentTopology& comp_topo) {
9393
apply_registration<Component>(
9494
components, comp_topo.power_sensor_object_idx, [&components](GenericPowerSensor const& power_sensor) {
@@ -129,7 +129,7 @@ constexpr void register_topology_components(ComponentContainer const& components
129129
}
130130

131131
template <std::same_as<GenericCurrentSensor> Component, class ComponentContainer>
132-
requires common::multi_component_container_c<ComponentContainer, Component, Branch, Branch3>
132+
requires common::component_container_c<ComponentContainer, Component, Branch, Branch3>
133133
constexpr void register_topology_components(ComponentContainer const& components, ComponentTopology& comp_topo) {
134134
apply_registration<Component>(components, comp_topo.current_sensor_object_idx,
135135
[&components](GenericCurrentSensor const& current_sensor) {
@@ -160,7 +160,7 @@ constexpr void register_topology_components(ComponentContainer const& components
160160
}
161161

162162
template <std::derived_from<Regulator> Component, class ComponentContainer>
163-
requires common::multi_component_container_c<ComponentContainer, Component, Branch, Branch3>
163+
requires common::component_container_c<ComponentContainer, Component, Branch, Branch3>
164164
constexpr void register_topology_components(ComponentContainer const& components, ComponentTopology& comp_topo) {
165165
apply_registration<Component>(
166166
components, comp_topo.regulated_object_idx, [&components](Regulator const& regulator) {
@@ -208,9 +208,8 @@ constexpr void register_connections_components(ComponentContainer components, Co
208208
} // namespace detail
209209

210210
template <typename ComponentContainer>
211-
requires common::multi_component_container_c<ComponentContainer, Branch, Branch3, Source, Shunt, GenericLoadGen,
212-
GenericVoltageSensor, GenericPowerSensor, GenericCurrentSensor,
213-
Regulator>
211+
requires common::component_container_c<ComponentContainer, Branch, Branch3, Source, Shunt, GenericLoadGen,
212+
GenericVoltageSensor, GenericPowerSensor, GenericCurrentSensor, Regulator>
214213
ComponentTopology construct_topology(ComponentContainer const& components) {
215214
ComponentTopology comp_topo;
216215
detail::register_topology_components<Node>(components, comp_topo);
@@ -227,7 +226,7 @@ ComponentTopology construct_topology(ComponentContainer const& components) {
227226
}
228227

229228
template <typename ComponentContainer>
230-
requires common::multi_component_container_c<ComponentContainer, Branch, Branch3, Source>
229+
requires common::component_container_c<ComponentContainer, Branch, Branch3, Source>
231230
ComponentConnections construct_components_connections(ComponentContainer const& components) {
232231
ComponentConnections comp_conn;
233232
detail::register_connections_components<Branch>(components, comp_conn);

tests/cpp_unit_tests/test_container.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -228,15 +228,15 @@ TEST_CASE("Test component container") {
228228
static_assert(common::component_container_c<CompContainer, C>);
229229
static_assert(common::component_container_c<CompContainer, C1>);
230230
static_assert(common::component_container_c<CompContainer, C2>);
231+
static_assert(common::component_container_c<CompContainer, C, C1>);
232+
static_assert(common::component_container_c<CompContainer, C1, C2>);
233+
static_assert(common::component_container_c<CompContainer, C, C1, C2>);
231234
static_assert(common::component_container_c<CompContainer2, C>);
232235
static_assert(common::component_container_c<CompContainer2, C1>);
233236
static_assert(common::component_container_c<CompContainer2, C2>);
234-
static_assert(common::multi_component_container_c<CompContainer, C, C1>);
235-
static_assert(common::multi_component_container_c<CompContainer, C1, C2>);
236-
static_assert(common::multi_component_container_c<CompContainer, C, C1, C2>);
237-
static_assert(common::multi_component_container_c<CompContainer2, C, C1>);
238-
static_assert(common::multi_component_container_c<CompContainer2, C1, C2>);
239-
static_assert(common::multi_component_container_c<CompContainer2, C, C1, C2>);
237+
static_assert(common::component_container_c<CompContainer2, C, C1>);
238+
static_assert(common::component_container_c<CompContainer2, C1, C2>);
239+
static_assert(common::component_container_c<CompContainer2, C, C1, C2>);
240240
}
241241
}
242242

0 commit comments

Comments
 (0)