1 #ifndef UTOPIA_DATAIO_DATA_MANAGER_UTILS_HH
2 #define UTOPIA_DATAIO_DATA_MANAGER_UTILS_HH
4 #include "../../core/type_traits.hh"
5 #include "../../core/zip.hh"
6 #include "../cfg_utils.hh"
36 template <
typename... T >
38 : std::conjunction< Utopia::Utils::is_callable< T >... >
53 template <
class ValType,
class KVPairs,
class ObjMap >
68 if constexpr (std::is_base_of_v<
74 map[get< 0 >(kv)] = std::make_shared< std::tuple_element_t<
80 map[get< 0 >(kv)] = std::make_shared< ValType >(get< 1 >(kv));
86 for (
const auto& [k, v] : kv_pairs)
88 map[k] = std::make_shared< ValType >(v);
106 template <
class ObjMap,
class ValType,
class KVPairs >
111 unpack_shared< ValType >(kv_pairs, map);
147 template <
class AssocsMap,
class NamedTasks,
class NamedDTMap,
class Assocs >
150 const NamedDTMap& named_dts,
151 Assocs assocs = Assocs{})
160 if (tasks.size() != named_dts.size())
162 if (assocs.size() == 0)
164 throw std::invalid_argument(
165 "Error, explicit associations have to be given when mapping "
166 "unequal numbers of decider or trigger functions and tasks.");
170 for (
auto&& [taskname, dt_name] : assocs)
172 map[dt_name].push_back(taskname);
179 for (
auto&& [namedtask, namedhelper] : Itertools::zip(tasks, named_dts))
181 map[namedhelper.first].push_back(namedtask.first);
void for_each(const Utopia::ExecPolicy policy, InputIt first, InputIt last, UnaryFunction f)
Apply a function to a range.
Definition: parallel.hh:346
void unpack_shared(KVPairs &&kv_pairs, ObjMap &&map)
Helper function to unpack (key, value) container into a map of shared pointers of a type.
Definition: utils.hh:55
AssocsMap build_task_association_map(const NamedTasks &tasks, const NamedDTMap &named_dts, Assocs assocs=Assocs{})
Build an association map, i.e., a map that associates a decider/trigger name with a collection of tas...
Definition: utils.hh:149
Definition: metaprogramming.hh:43
constexpr bool has_static_size_v
Shorthand for has_static_size::value.
Definition: type_traits.hh:675
typename remove_qualifier< T >::type remove_qualifier_t
Shorthand for 'typename remove_qualifier::value'.
Definition: type_traits.hh:97
Metafunction for use with boost hana, check if all T are callable types.
Definition: utils.hh:39