Skip to content

Commit 3495fe3

Browse files
committed
clean up core_utils
Signed-off-by: Nitish Bharambe <[email protected]>
1 parent 9f196f5 commit 3495fe3

File tree

1 file changed

+42
-35
lines changed
  • power_grid_model_c/power_grid_model/include/power_grid_model/main_core

1 file changed

+42
-35
lines changed

power_grid_model_c/power_grid_model/include/power_grid_model/main_core/core_utils.hpp

Lines changed: 42 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,38 @@
1212
#include <vector>
1313
namespace power_grid_model::main_core::utils {
1414

15+
namespace detail {
16+
17+
template <typename Tuple> struct tuple_type_identities_to_tuple_types;
18+
19+
template <typename... Ts> struct tuple_type_identities_to_tuple_types<std::tuple<std::type_identity<Ts>...>> {
20+
using type = std::tuple<Ts...>;
21+
};
22+
23+
template <typename Tuple>
24+
using tuple_type_identities_to_tuple_types_t = typename tuple_type_identities_to_tuple_types<Tuple>::type;
25+
26+
template <typename... Types, typename... SelectTypes>
27+
constexpr auto filter_tuple_types(std::tuple<std::type_identity<Types>...> /* types*/,
28+
std::tuple<std::type_identity<SelectTypes>...> /* select_types*/) {
29+
constexpr auto sub_type_in_type = []<typename T>() { return (std::is_same_v<T, SelectTypes> || ...); };
30+
31+
return std::tuple_cat(std::conditional_t<sub_type_in_type.template operator()<Types>(),
32+
std::tuple<std::type_identity<Types>>, std::tuple<>>{}...);
33+
}
34+
35+
template <typename Tuple, class Functor, std::size_t... Indices>
36+
constexpr void run_functor_with_tuple_index_return_void(Functor functor, std::index_sequence<Indices...>) {
37+
(functor.template operator()<std::tuple_element_t<Indices, Tuple>>(), ...);
38+
}
39+
40+
template <typename Tuple, class Functor, std::size_t... Indices>
41+
constexpr auto run_functor_with_tuple_index_return_array(Functor functor, std::index_sequence<Indices...>) {
42+
return std::array { functor.template operator()<std::tuple_element_t<Indices, Tuple>>()... };
43+
}
44+
45+
} // namespace detail
46+
1547
constexpr Idx invalid_index{-1};
1648

1749
struct UpdateCompProperties {
@@ -59,41 +91,14 @@ template <class... Types, class Functor> constexpr auto run_functor_with_all_typ
5991
}
6092
/////////////////// To remove ///////////////////
6193

62-
template <typename Tuple> struct tuple_type_identities_to_tuple_types;
63-
64-
template <typename... Ts> struct tuple_type_identities_to_tuple_types<std::tuple<std::type_identity<Ts>...>> {
65-
using type = std::tuple<Ts...>;
66-
};
67-
68-
template <typename Tuple>
69-
using tuple_type_identities_to_tuple_types_t = typename tuple_type_identities_to_tuple_types<Tuple>::type;
70-
71-
template <typename... Types, typename... SelectTypes>
72-
constexpr auto filter_tuple_types(std::tuple<std::type_identity<Types>...>,
73-
std::tuple<std::type_identity<SelectTypes>...>) {
74-
constexpr auto sub_type_in_type = []<typename T>() { return (std::is_same_v<T, SelectTypes> || ...); };
75-
76-
return std::tuple_cat(std::conditional_t<sub_type_in_type.template operator()<Types>(),
77-
std::tuple<std::type_identity<Types>>, std::tuple<>>{}...);
78-
}
79-
80-
template <typename Tuple, class Functor, std::size_t... Indices>
81-
constexpr void run_functor_with_tuple_index_return_void(Functor functor, std::index_sequence<Indices...>) {
82-
(functor.template operator()<std::tuple_element_t<Indices, Tuple>>(), ...);
83-
}
84-
8594
template <typename Tuple, class Functor> constexpr void run_functor_with_tuple_return_void(Functor functor) {
86-
run_functor_with_tuple_index_return_void<Tuple>(functor, std::make_index_sequence<std::tuple_size_v<Tuple>>{});
87-
}
88-
89-
template <typename Tuple, class Functor, std::size_t... Indices>
90-
constexpr auto run_functor_with_tuple_index_return_array(Functor functor, std::index_sequence<Indices...>) {
91-
return std::array { functor.template operator()<std::tuple_element_t<Indices, Tuple>>()... };
95+
detail::run_functor_with_tuple_index_return_void<Tuple>(functor,
96+
std::make_index_sequence<std::tuple_size_v<Tuple>>{});
9297
}
9398

9499
template <typename Tuple, class Functor> constexpr auto run_functor_with_tuple_return_array(Functor functor) {
95-
return run_functor_with_tuple_index_return_array<Tuple>(functor,
96-
std::make_index_sequence<std::tuple_size_v<Tuple>>{});
100+
return detail::run_functor_with_tuple_index_return_array<Tuple>(
101+
functor, std::make_index_sequence<std::tuple_size_v<Tuple>>{});
97102
}
98103

99104
template <class T, class U> struct MainModelType;
@@ -104,14 +109,14 @@ struct MainModelType<ExtraRetrievableTypes<ExtraRetrievableType...>, ComponentLi
104109

105110
using ComponentContainer = Container<ExtraRetrievableTypes<ExtraRetrievableType...>, ComponentType...>;
106111
using MainModelState = main_core::MainModelState<ComponentContainer>;
107-
using ExtraRetrievableTypesTuple = std::tuple<std::type_identity<ExtraRetrievableType>...>;
108112
using ComponentTypesTuple = std::tuple<ComponentType...>;
109113

110114
static constexpr size_t n_types = sizeof...(ComponentType);
111115
// TODO Should not have to go via container_impl.
112116
template <class CompType>
113117
static constexpr size_t index_of_component = container_impl::get_cls_pos_v<CompType, ComponentType...>;
114118

119+
private:
115120
static constexpr auto all_types_tuple_v_ =
116121
std::tuple<std::type_identity<ComponentType>..., std::type_identity<ExtraRetrievableType>...>{};
117122
// TODO: Would making a unique be necessary? We have Node mentioned as a ExtraRetrievableType and ComponentType so
@@ -126,10 +131,12 @@ struct MainModelType<ExtraRetrievableTypes<ExtraRetrievableType...>, ComponentLi
126131
static constexpr auto topology_connection_types_tuple_v_ =
127132
std::tuple<std::type_identity<Branch>, std::type_identity<Branch3>, std::type_identity<Source>>{};
128133

129-
using TopologyTypesTuple = tuple_type_identities_to_tuple_types_t<decltype(filter_tuple_types(
134+
public:
135+
using TopologyTypesTuple = detail::tuple_type_identities_to_tuple_types_t<decltype(detail::filter_tuple_types(
130136
topology_types_tuple_v_, all_types_tuple_v_))>;
131-
using TopologyConnectionTypesTuple = tuple_type_identities_to_tuple_types_t<decltype(filter_tuple_types(
132-
topology_connection_types_tuple_v_, all_types_tuple_v_))>;
137+
using TopologyConnectionTypesTuple =
138+
detail::tuple_type_identities_to_tuple_types_t<decltype(detail::filter_tuple_types(
139+
topology_connection_types_tuple_v_, all_types_tuple_v_))>;
133140

134141
// Update related types
135142
using OwnedUpdateDataset = std::tuple<std::vector<typename ComponentType::UpdateType>...>;

0 commit comments

Comments
 (0)