@@ -14,24 +14,6 @@ namespace power_grid_model::main_core::utils {
1414
1515namespace detail {
1616
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-
3517template <typename Tuple, class Functor , std::size_t ... Indices>
3618constexpr void run_functor_with_tuple_index_return_void (Functor functor, std::index_sequence<Indices...>) {
3719 (functor.template operator ()<std::tuple_element_t <Indices, Tuple>>(), ...);
@@ -41,33 +23,6 @@ constexpr void run_functor_with_tuple_index_return_void(Functor functor, std::in
4123
4224constexpr Idx invalid_index{-1 };
4325
44- struct UpdateCompProperties {
45- bool has_any_elements{false }; // whether the component has any elements in the update data
46- bool ids_all_na{false }; // whether all ids are all NA
47- bool ids_part_na{false }; // whether some ids are NA but some are not
48- bool dense{false }; // whether the component is dense
49- bool uniform{false }; // whether the component is uniform
50- bool is_columnar{false }; // whether the component is columnar
51- bool update_ids_match{false }; // whether the ids match
52- Idx elements_ps_in_update{utils::invalid_index}; // count of elements for this component per scenario in update
53- Idx elements_in_base{utils::invalid_index}; // count of elements for this component per scenario in input
54-
55- constexpr bool no_id () const { return !has_any_elements || ids_all_na; }
56- constexpr bool qualify_for_optional_id () const {
57- return update_ids_match && ids_all_na && uniform && elements_ps_in_update == elements_in_base;
58- }
59- constexpr bool provided_ids_valid () const {
60- return is_empty_component () || (update_ids_match && !(ids_all_na || ids_part_na));
61- }
62- constexpr bool is_empty_component () const { return !has_any_elements; }
63- constexpr bool is_independent () const { return qualify_for_optional_id () || provided_ids_valid (); }
64- constexpr Idx get_n_elements () const {
65- assert (uniform || elements_ps_in_update == utils::invalid_index);
66-
67- return qualify_for_optional_id () ? elements_ps_in_update : na_Idx;
68- }
69- };
70-
7126// ///////////////// To remove ///////////////////
7227
7328template <class ... ComponentTypes> constexpr size_t n_types = sizeof ...(ComponentTypes);
@@ -91,62 +46,4 @@ template <typename Tuple, class Functor> constexpr void run_functor_with_tuple_r
9146 std::make_index_sequence<std::tuple_size_v<Tuple>>{});
9247}
9348
94- template <class T , class U > struct MainModelType ;
95-
96- // TODO: discussion on checking dependent types can also be done here.
97- template <class ... ExtraRetrievableType, class ... ComponentType>
98- struct MainModelType <ExtraRetrievableTypes<ExtraRetrievableType...>, ComponentList<ComponentType...>> {
99-
100- using ComponentContainer = Container<ExtraRetrievableTypes<ExtraRetrievableType...>, ComponentType...>;
101- using MainModelState = main_core::MainModelState<ComponentContainer>;
102- using ComponentTypesTuple = std::tuple<ComponentType...>;
103-
104- static constexpr size_t n_types = sizeof ...(ComponentType);
105- // TODO Should not have to go via container_impl.
106- template <class CompType >
107- static constexpr size_t index_of_component = container_impl::get_cls_pos_v<CompType, ComponentType...>;
108-
109- private:
110- static constexpr auto all_types_tuple_v_ =
111- std::tuple<std::type_identity<ComponentType>..., std::type_identity<ExtraRetrievableType>...>{};
112- // TODO: Would making a unique be necessary? We have Node mentioned as a ExtraRetrievableType and ComponentType so
113- // summing up is possible but maybe not appropriate. Would it be better to handle them both separately? using
114-
115- static constexpr auto topology_types_tuple_v_ =
116- std::tuple<std::type_identity<Node>, std::type_identity<Branch>, std::type_identity<Branch3>,
117- std::type_identity<Source>, std::type_identity<Shunt>, std::type_identity<GenericLoadGen>,
118- std::type_identity<GenericVoltageSensor>, std::type_identity<GenericPowerSensor>,
119- std::type_identity<GenericCurrentSensor>, std::type_identity<Regulator>>{};
120-
121- static constexpr auto topology_connection_types_tuple_v_ =
122- std::tuple<std::type_identity<Branch>, std::type_identity<Branch3>, std::type_identity<Source>>{};
123-
124- public:
125- using TopologyTypesTuple = detail::tuple_type_identities_to_tuple_types_t <decltype (detail::filter_tuple_types(
126- topology_types_tuple_v_, all_types_tuple_v_))>;
127- using TopologyConnectionTypesTuple =
128- detail::tuple_type_identities_to_tuple_types_t <decltype (detail::filter_tuple_types(
129- topology_connection_types_tuple_v_, all_types_tuple_v_))>;
130-
131- // Update related types
132- using OwnedUpdateDataset = std::tuple<std::vector<typename ComponentType::UpdateType>...>;
133- using SequenceIdxView = std::array<std::span<Idx2D const >, n_types>;
134- using UpdateIndependence = std::array<UpdateCompProperties, n_types>;
135- using SequenceIdx = std::array<std::vector<Idx2D>, n_types>;
136- using SequenceIdxRefWrappers = std::array<std::reference_wrapper<std::vector<Idx2D> const >, n_types>;
137- using ComponentFlags = std::array<bool , n_types>;
138-
139- // Clean these 2. They are unused
140- static constexpr auto branch_param_in_seq_map =
141- std::array{index_of_component<Line>, index_of_component<Link>, index_of_component<Transformer>};
142- static constexpr auto shunt_param_in_seq_map = std::array{index_of_component<Shunt>};
143-
144- template <class Functor > static constexpr void run_functor_with_all_component_types_return_void (Functor functor) {
145- (functor.template operator ()<ComponentType>(), ...);
146- }
147- template <class Functor > static constexpr auto run_functor_with_all_component_types_return_array (Functor functor) {
148- return std::array { functor.template operator ()<ComponentType>()... };
149- }
150- };
151-
15249} // namespace power_grid_model::main_core::utils
0 commit comments