44
55#pragma once
66
7+ #include " ../all_components.hpp"
78#include " ../container.hpp"
89
910namespace power_grid_model ::main_core {
1011
11- // TODO Reconfirm if there is duplication with state_queries and if we can remove either one of them
12+ template <typename ComponentType, class ComponentContainer >
13+ requires common::storagable_component_container_c<ComponentContainer, ComponentType>
14+ inline Idx get_component_type_index (ComponentContainer const & components) {
15+ return components.template get_type_idx <ComponentType>();
16+ }
1217
1318template <typename ComponentType, class ComponentContainer >
1419 requires common::component_container_c<ComponentContainer, ComponentType>
@@ -22,4 +27,88 @@ inline Idx get_component_sequence_idx(ComponentContainer const& components, auto
2227 return components.template get_seq <ComponentType>(id_or_index);
2328}
2429
30+ template <class ComponentContainer > inline Idx2D get_component_idx_by_id (ComponentContainer const & components, ID id) {
31+ return components.get_idx_by_id (id);
32+ }
33+
34+ template <typename ComponentType, class ComponentContainer >
35+ requires common::component_container_c<ComponentContainer, ComponentType>
36+ inline Idx2D get_component_idx_by_id (ComponentContainer const & components, ID id) {
37+ return components.template get_idx_by_id <ComponentType>(id);
38+ }
39+
40+ template <typename ComponentType, class ComponentContainer >
41+ requires common::storagable_component_container_c<ComponentContainer, ComponentType>
42+ constexpr Idx get_component_group_idx (ComponentContainer const & components) {
43+ return components.template get_group_idx <ComponentType>();
44+ }
45+
46+ template <std::derived_from<Base> BaseComponent, std::derived_from<Base> Component, class ComponentContainer >
47+ requires std::derived_from<Component, BaseComponent> &&
48+ common::component_container_c<ComponentContainer, BaseComponent> &&
49+ common::storagable_component_container_c<ComponentContainer, Component>
50+ constexpr auto get_component_sequence_offset (ComponentContainer const & components) {
51+ return components.template get_start_idx <BaseComponent, Component>();
52+ }
53+
54+ template <typename ComponentType, class ComponentContainer >
55+ requires common::component_container_c<ComponentContainer, ComponentType>
56+ constexpr auto & get_component (ComponentContainer const & components, auto const & id_or_index) {
57+ return components.template get_item <ComponentType>(id_or_index);
58+ }
59+
60+ template <typename ComponentType, class ComponentContainer >
61+ requires common::component_container_c<ComponentContainer, ComponentType>
62+ constexpr auto & get_component (ComponentContainer& components, auto const & id_or_index) {
63+ return components.template get_item <ComponentType>(id_or_index);
64+ }
65+
66+ template <typename ComponentType, class ComponentContainer >
67+ requires common::component_container_c<ComponentContainer, ComponentType>
68+ constexpr auto & get_component_by_sequence (ComponentContainer const & components, Idx sequence) {
69+ return components.template get_item_by_seq <ComponentType>(sequence);
70+ }
71+
72+ template <typename ComponentType, class ComponentContainer >
73+ requires common::component_container_c<ComponentContainer, ComponentType>
74+ constexpr auto & get_component_by_sequence (ComponentContainer& components, Idx sequence) {
75+ return components.template get_item_by_seq <ComponentType>(sequence);
76+ }
77+
78+ template <typename ComponentType, class ComponentContainer , typename ... Args>
79+ requires common::storagable_component_container_c<ComponentContainer, ComponentType>
80+ constexpr auto emplace_component (ComponentContainer& components, ID id, Args&&... args) {
81+ return components.template emplace <ComponentType>(id, std::forward<Args>(args)...);
82+ }
83+
84+ template <typename ComponentType, class ComponentContainer , typename ... Args>
85+ requires common::storagable_component_container_c<ComponentContainer, ComponentType>
86+ constexpr void reserve_component (ComponentContainer& components, std::integral auto size) {
87+ components.template reserve <ComponentType>(size);
88+ }
89+
90+ template <typename ComponentType, class ComponentContainer >
91+ requires common::component_container_c<ComponentContainer, ComponentType>
92+ constexpr auto get_component_citer (ComponentContainer const & components) {
93+ return components.template citer <ComponentType>();
94+ }
95+
96+ template <std::derived_from<Branch> ComponentType, class ComponentContainer >
97+ requires common::component_container_c<ComponentContainer, ComponentType>
98+ constexpr auto get_topology_index (ComponentContainer const & components, auto const & id_or_index) {
99+ return get_component_sequence_idx<Branch>(components, id_or_index);
100+ }
101+
102+ template <std::derived_from<Branch3> ComponentType, class ComponentContainer >
103+ requires common::component_container_c<ComponentContainer, ComponentType>
104+ constexpr auto get_topology_index (ComponentContainer const & components, auto const & id_or_index) {
105+ return get_component_sequence_idx<Branch3>(components, id_or_index);
106+ }
107+
108+ template <std::derived_from<Regulator> ComponentType, class ComponentContainer >
109+ requires common::component_container_c<ComponentContainer, ComponentType>
110+ constexpr auto get_topology_index (ComponentContainer const & components, auto const & id_or_index) {
111+ return get_component_sequence_idx<Regulator>(components, id_or_index);
112+ }
113+
25114} // namespace power_grid_model::main_core
0 commit comments