24struct ContainerFactory
26 void operator() (
const Unknown& descriptor,
const T& defaultValue)
const
28 DUNE_THROW(Dune::NotImplemented,
"Cannot create a vector. The container descriptor is unknown.");
31 template<
class... ChildDescriptor>
34 return unpackIntegerSequence([&](
auto... ii) {
35 return Dune::TupleVector<
decltype((*this)(descriptor[ii], defaultValue))...>{(*this)(descriptor[ii], defaultValue)...};
36 }, std::make_index_sequence<
sizeof...(ChildDescriptor)>());
39 template<
class ChildDescriptor, std::
size_t n>
42 using ChildContainer =
decltype((*this)(descriptor[0], defaultValue));
43 return unpackIntegerSequence([&](
auto... ii) {
44 return std::array<ChildContainer, n>{(*this)(descriptor[ii], defaultValue)...};
45 }, std::make_index_sequence<n>());
48 template<
class ChildDescriptor>
51 using ChildContainer =
decltype((*this)(descriptor[0], defaultValue));
52 auto result = std::vector<ChildContainer>();
53 result.reserve(descriptor.size());
54 for (std::size_t i = 0; i < descriptor.size(); ++i)
55 result.emplace_back((*
this)(descriptor[i], defaultValue));
59 template<
class ChildDescriptor, std::
size_t n>
62 using ChildContainer =
decltype((*this)(descriptor[0], defaultValue));
63 auto childContainer = (*this)(descriptor[0], defaultValue);
64 return unpackIntegerSequence([&](
auto... ii) {
65 return std::array<ChildContainer, n>{((void)(ii),childContainer)...};
66 }, std::make_index_sequence<n>());
69 template<
class ChildDescriptor>
72 using ChildContainer =
decltype((*this)(descriptor[0], defaultValue));
73 auto childContainer = (*this)(descriptor[0], defaultValue);
74 return std::vector<ChildContainer>(descriptor.size(), childContainer);
79 auto operator() (
const Value& descriptor,
const T& defaultValue)
const
81 return T(defaultValue);
auto makeContainer(const ContainerDescriptor &descriptor, const T &defaultValue)
Construct a nested random access container compatible with the container descriptor.
Definition containerfactory.hh:102
std::array< Child, n > Array
Descriptor for arrays with all children of the same type and static size.
Definition containerdescriptors.hh:98