template<typename... Ts>
tk::Control class

Control is a slightly more specialized level of a tagged tuple, implementing still very generic accessors to tuple elements at various depths at the tuple hierarchy. At this time, max 3 levels are implemented, but it would be nice to replace the triple-overloads with a single generic one that works at all depths. For an example specialization, i.e., client-side code, see walker::ctr::InputDeck.

Base classes

template<typename... Ts>
struct tagged_tuple

Public functions

template<typename type>
auto convert(const std::string& str) -> type
Convert string to a type given by the template argument using std::stringstream.
template<typename type>
auto convert(const type& val) -> std::string
Convert value of type given by the template argument to std::string using std::stringstream.

Const-ref accessors at three different depths

template<typename tag>
auto get() const -> const Tuple::template nT<tag>& constexpr noexcept
Const-ref accessor to single element at 1st level.
template<typename tag, typename subtag>
auto get() const -> const Tuple::template nT<tag>::template nT<subtag>& constexpr noexcept
Const-ref accessor to single element at 2nd level.
template<typename tag, typename subtag, typename subsubtag>
auto get() const -> const Tuple::template nT<tag>::template nT<subtag>::template nT<subsubtag>& constexpr noexcept
Const-ref accessor to single element at 3rd level.
template<typename tag, typename subtag, typename subsubtag, typename subsubsubtag>
auto get() const -> const Tuple::template nT<tag>::template nT<subtag>::template nT<subsubtag>::template nT<subsubsubtag>& constexpr noexcept
Const-ref accessor to single element at 4th level.

Rvalue accessors at three different depths

template<typename tag>
auto get() -> Tuple::template nT<tag>& noexcept
Rvalue accessor to single element at 1st level.
template<typename tag, typename subtag>
auto get() -> Tuple::template nT<tag>::template nT<subtag>& noexcept
Rvalue accessor to single element at 2nd level.
template<typename tag, typename subtag, typename subsubtag>
auto get() -> Tuple::template nT<tag>::template nT<subtag>::template nT<subsubtag>& noexcept
Rvalue accessor to single element at 3rd level.

Set value at three different depths

template<typename tag>
void set(const typename Tuple::template nT<tag>& value) noexcept
Set value at slot at tag at 1st level.
template<typename tag, typename subtag>
void set(const typename Tuple::template nT<tag> ::template nT<subtag>& value) noexcept
Set value at slot at tag at 2nd level.
template<typename tag, typename subtag, typename subsubtag>
void set(const typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag>& value) noexcept
Set value at slot at tag at 3rd level.

Convert and set value at tag at three different depths

template<typename tag>
void store(const std::string& value) noexcept
Convert and set value at tag at 1st level.
template<typename tag, typename subtag>
void store(const std::string& value) noexcept
Convert and set value at tag at 2nd level.
template<typename tag, typename subtag, typename subsubtag>
void store(const std::string& value) noexcept
Convert and set value at tag at 3rd level.

Push back value to vector at tag at three different depths

template<typename tag>
void push_back(const typename Tuple::template nT<tag>::value_type& value = typename Tuple::template nT<tag>::value_type())
Push back value to vector at tag at 1st level without conversion.
template<typename tag, typename subtag>
void push_back(const typename Tuple::template nT<tag> ::template nT<subtag> ::value_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::value_type())
Push back value to vector at tag at 2nd level without conversion.
template<typename tag, typename subtag, typename subsubtag>
void push_back(const typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::value_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::value_type())
Push back value to vector at tag at 3rd level without conversion.
template<typename tag, typename subtag, typename subsubtag, typename subsubsubtag>
void push_back(const typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::template nT<subsubsubtag> ::value_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::template nT<subsubsubtag> ::value_type())
Push back value to vector at tag at 3rd level without conversion.

Push back value to vector of back of vector at tag at three different depths

template<typename tag>
void push_back_back(const typename Tuple::template nT<tag> ::value_type::value_type& value = typename Tuple::template nT<tag> ::value_type::value_type())
Push back value to vector of back of vector at tag at 1st level without conversion.
template<typename tag, typename subtag>
void push_back_back(const typename Tuple::template nT<tag> ::template nT<subtag> ::value_type::value_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::value_type::value_type())
Push back value to vector of back of vector at tag at 2nd level without conversion.
template<typename tag, typename subtag, typename subsubtag>
void push_back_back(const typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::value_type::value_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::value_type::value_type())
Push back value to vector of back of vector at tag at 3rd level without conversion.
template<typename tag, typename subtag, typename subsubtag, typename subsubsubtag>
void push_back_back(const typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::template nT<subsubsubtag> ::value_type::value_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::template nT<subsubsubtag> ::value_type::value_type())
Push back value to vector of back of vector at tag at 3rd level without conversion.

Convert and push back value to vector at tag at three different

depths

template<typename tag>
void store_back(const std::string& value)
Convert and push back value to vector at tag at 1st level.
template<typename tag, typename subtag>
void store_back(const std::string& value)
Convert and push back value to slot at tag at 2nd level.
template<typename tag, typename subtag, typename subsubtag>
void store_back(const std::string& value)
Convert and push back value to slot at tag at 3rd level.

Convert and push back value to vector of back of vector at tag at three different depths

template<typename tag>
void store_back_back(const std::string& value)
Convert and push back value to vector of back of vector at tag at 1st level.
template<typename tag, typename subtag>
void store_back_back(const std::string& value)
Convert and push back value to vector of back of vector at tag at 2nd level.
template<typename tag, typename subtag, typename subsubtag>
void store_back_back(const std::string& value)
Convert and push back value to vector of back of vector at tag at 3rd level.
template<typename tag, typename subtag, typename subsubtag, typename subsubsubtag>
void store_back_back(const std::string& value)
Convert and push back value to vector of back of vector at tag at 3rd level.

Convert and push back value to vector of back of vector of back of vector at tag at three different depths

template<typename tag>
void store_back_back_back(const std::string& value)
Convert and push back value to vector of back of vector of back of vector at tag at 1st level.
template<typename tag, typename subtag>
void store_back_back_back(const std::string& value)
Convert and push back value to vector of back of vector of back of vector at tag at 2nd level.
template<typename tag, typename subtag, typename subsubtag>
void store_back_back_back(const std::string& value)
Convert and push back value to vector of back of vector of back of vector at tag at 3rd level.
template<typename tag, typename subtag, typename subsubtag, typename subsubsubtag>
void store_back_back_back(const std::string& value)
Convert and push back value to vector of back of vector of back of vector at tag at 3rd level.

Insert key-value pair to map at tag at three different depths

template<typename tag>
void insert(const typename Tuple::template nT<tag> ::key_type& key, const typename Tuple::template nT<tag> ::mapped_type& value = typename Tuple::template nT<tag> ::mapped_type())
Insert key-value pair to map at tag at 1st level using std::map::operator[].
template<typename tag, typename subtag>
void insert(const typename Tuple::template nT<tag> ::template nT<subtag> ::key_type& key, const typename Tuple::template nT<tag> ::template nT<subtag> ::mapped_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::mapped_type())
Insert key-value pair to map at tag at 2nd level using std::map::operator[].
template<typename tag, typename subtag, typename subsubtag>
void insert(const typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::key_type& key, const typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::mapped_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::mapped_type())
Insert key-value pair to map at tag at 3rd level using std::map::operator[].

Insert key-value pair with converting value to map at tag at three different depths

template<typename key_type, typename field, typename tag>
void insert_field(const key_type& key, const std::string& value)
Insert key-value pair with converting value to map at tag at 1st level using std::map::operator[].
template<typename key_type, typename field, typename tag, typename subtag>
void insert_field(const key_type& key, const std::string& value)
Insert key-value pair with converting value to map at tag at 2nd level using std::map::operator[].
template<typename key_type, typename field, typename tag, typename subtag, typename subsubtag>
void insert_field(const key_type key, const std::string& value)
Insert key-value pair with converting value to map at tag at 3rd level using std::map::operator[].

Insert key-value pair without conversion of value to map at tag at three different depths

template<typename key_type, typename field, typename field_type, typename tag>
void insert_opt(const key_type& key, const field_type& value)
Insert value to field of tagged tuple behind a key of a map at tag at 1st level.
template<typename key_type, typename field, typename field_type, typename tag, typename subtag>
void insert_opt(const key_type& key, const field_type& value)
Insert value to field of tagged tuple behind a key of a map at tag at 2nd level.
template<typename key_type, typename field, typename field_type, typename tag, typename subtag, typename subsubtag>
void insert_opt(const key_type& key, const field_type& value)
Insert key-value pair with converting value to map at tag at 3rd level using std::map::operator[].

Pack/Unpack: Serialize Control object for Charm++

void pup(PUP::er& p)
Pack/Unpack serialize member function.
void operator|(PUP::er& p, Control<Ts...>& c)
Pack/Unpack serialize operator|.

Function documentation

template<typename... Ts> template<typename type>
type tk::Control<Ts>::convert(const std::string& str)

Convert string to a type given by the template argument using std::stringstream.

Parameters
str in String to convert
Returns A value of type given by the template argument

template<typename... Ts> template<typename type>
std::string tk::Control<Ts>::convert(const type& val)

Convert value of type given by the template argument to std::string using std::stringstream.

Parameters
val in Value of type given by the template argument
Returns std::string of value converted

template<typename... Ts> template<typename tag>
const Tuple::template nT<tag>& tk::Control<Ts>::get() const constexpr noexcept

Const-ref accessor to single element at 1st level.

Returns A constant reference behind a tag given by the template argument

template<typename... Ts> template<typename tag, typename subtag>
const Tuple::template nT<tag>::template nT<subtag>& tk::Control<Ts>::get() const constexpr noexcept

Const-ref accessor to single element at 2nd level.

Returns A constant reference behind a tag, subtag given by the template arguments

template<typename... Ts> template<typename tag, typename subtag, typename subsubtag>
const Tuple::template nT<tag>::template nT<subtag>::template nT<subsubtag>& tk::Control<Ts>::get() const constexpr noexcept

Const-ref accessor to single element at 3rd level.

Returns A constant reference behind a tag, subtag, subsubtag given by the template arguments

template<typename... Ts> template<typename tag, typename subtag, typename subsubtag, typename subsubsubtag>
const Tuple::template nT<tag>::template nT<subtag>::template nT<subsubtag>::template nT<subsubsubtag>& tk::Control<Ts>::get() const constexpr noexcept

Const-ref accessor to single element at 4th level.

Returns A constant reference behind a tag, subtag, subsubtag given by the template arguments

template<typename... Ts> template<typename tag>
Tuple::template nT<tag>& tk::Control<Ts>::get() noexcept

Rvalue accessor to single element at 1st level.

Returns An rvalue reference behind a tag given by the template argument

template<typename... Ts> template<typename tag, typename subtag>
Tuple::template nT<tag>::template nT<subtag>& tk::Control<Ts>::get() noexcept

Rvalue accessor to single element at 2nd level.

Returns An rvalue reference behind a tag, subtag given by the template arguments

template<typename... Ts> template<typename tag, typename subtag, typename subsubtag>
Tuple::template nT<tag>::template nT<subtag>::template nT<subsubtag>& tk::Control<Ts>::get() noexcept

Rvalue accessor to single element at 3rd level.

Returns An rvalue reference behind a tag, subtag, subsubtag given by the template arguments

template<typename... Ts> template<typename tag>
void tk::Control<Ts>::set(const typename Tuple::template nT<tag>& value) noexcept

Set value at slot at tag at 1st level.

Parameters
value in Value to set behind tag given by the template argument

template<typename... Ts> template<typename tag, typename subtag>
void tk::Control<Ts>::set(const typename Tuple::template nT<tag> ::template nT<subtag>& value) noexcept

Set value at slot at tag at 2nd level.

Parameters
value in Value to set behind tag and subtag given by the template arguments

template<typename... Ts> template<typename tag, typename subtag, typename subsubtag>
void tk::Control<Ts>::set(const typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag>& value) noexcept

Set value at slot at tag at 3rd level.

Parameters
value in Value to set behind tag, subtag, and subsubtag given by the template arguments

template<typename... Ts> template<typename tag>
void tk::Control<Ts>::store(const std::string& value) noexcept

Convert and set value at tag at 1st level.

Parameters
value in Value to convert and set behind tag given by the template argument

template<typename... Ts> template<typename tag, typename subtag>
void tk::Control<Ts>::store(const std::string& value) noexcept

Convert and set value at tag at 2nd level.

Parameters
value in Value to convert and set behind tag and subtag given by the template arguments

template<typename... Ts> template<typename tag, typename subtag, typename subsubtag>
void tk::Control<Ts>::store(const std::string& value) noexcept

Convert and set value at tag at 3rd level.

Parameters
value in Value to convert and set behind tag, subtag, and

template<typename... Ts> template<typename tag>
void tk::Control<Ts>::push_back(const typename Tuple::template nT<tag>::value_type& value = typename Tuple::template nT<tag>::value_type())

Push back value to vector at tag at 1st level without conversion.

Parameters
value in Value to push back behind tag given by the template argument

template<typename... Ts> template<typename tag, typename subtag>
void tk::Control<Ts>::push_back(const typename Tuple::template nT<tag> ::template nT<subtag> ::value_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::value_type())

Push back value to vector at tag at 2nd level without conversion.

Parameters
value in Value to push back behind tag and subtag given by the template argument

template<typename... Ts> template<typename tag, typename subtag, typename subsubtag>
void tk::Control<Ts>::push_back(const typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::value_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::value_type())

Push back value to vector at tag at 3rd level without conversion.

Parameters
value in Value to push back behind tag, subtag, and subsubtag given by the template argument

template<typename... Ts> template<typename tag, typename subtag, typename subsubtag, typename subsubsubtag>
void tk::Control<Ts>::push_back(const typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::template nT<subsubsubtag> ::value_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::template nT<subsubsubtag> ::value_type())

Push back value to vector at tag at 3rd level without conversion.

Parameters
value in Value to push back behind tag, subtag, and subsubtag given by the template argument

template<typename... Ts> template<typename tag>
void tk::Control<Ts>::push_back_back(const typename Tuple::template nT<tag> ::value_type::value_type& value = typename Tuple::template nT<tag> ::value_type::value_type())

Push back value to vector of back of vector at tag at 1st level without conversion.

Parameters
value in Value to push back behind tag given by the template argument

This is similar to store_back_back but performes no conversion.

template<typename... Ts> template<typename tag, typename subtag>
void tk::Control<Ts>::push_back_back(const typename Tuple::template nT<tag> ::template nT<subtag> ::value_type::value_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::value_type::value_type())

Push back value to vector of back of vector at tag at 2nd level without conversion.

Parameters
value in Value to push back behind tag and subtag given by the template argument

This is similar to store_back_back but performes no conversion. no conversion.

template<typename... Ts> template<typename tag, typename subtag, typename subsubtag>
void tk::Control<Ts>::push_back_back(const typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::value_type::value_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::value_type::value_type())

Push back value to vector of back of vector at tag at 3rd level without conversion.

Parameters
value in Value to push back behind tag, subtag, and subsubtag given by the template argument

This is similar to store_back_back but performes no conversion. no conversion.

template<typename... Ts> template<typename tag, typename subtag, typename subsubtag, typename subsubsubtag>
void tk::Control<Ts>::push_back_back(const typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::template nT<subsubsubtag> ::value_type::value_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::template nT<subsubsubtag> ::value_type::value_type())

Push back value to vector of back of vector at tag at 3rd level without conversion.

Parameters
value in Value to push back behind tag, subtag, and subsubtag given by the template argument

This is similar to store_back_back but performes no conversion. no conversion.

template<typename... Ts> template<typename tag>
void tk::Control<Ts>::store_back(const std::string& value)

Convert and push back value to vector at tag at 1st level.

Parameters
value in Value to convert and push back behind tag given by the template argument

template<typename... Ts> template<typename tag, typename subtag>
void tk::Control<Ts>::store_back(const std::string& value)

Convert and push back value to slot at tag at 2nd level.

Parameters
value in Value to convert and push back behind tag and subtag given by the template arguments

template<typename... Ts> template<typename tag, typename subtag, typename subsubtag>
void tk::Control<Ts>::store_back(const std::string& value)

Convert and push back value to slot at tag at 3rd level.

Parameters
value in Value to convert and push back behind tag, subtag, and subsubtag given by the template arguments

template<typename... Ts> template<typename tag>
void tk::Control<Ts>::store_back_back(const std::string& value)

Convert and push back value to vector of back of vector at tag at 1st level.

Parameters
value in Value to convert and push back behind tag given by the template arguments

template<typename... Ts> template<typename tag, typename subtag>
void tk::Control<Ts>::store_back_back(const std::string& value)

Convert and push back value to vector of back of vector at tag at 2nd level.

Parameters
value in Value to convert and push back behind tag and subtag given by the template arguments

template<typename... Ts> template<typename tag, typename subtag, typename subsubtag>
void tk::Control<Ts>::store_back_back(const std::string& value)

Convert and push back value to vector of back of vector at tag at 3rd level.

Parameters
value in Value to convert and push back behind tag, subtag, and subsubtag given by the template arguments

template<typename... Ts> template<typename tag, typename subtag, typename subsubtag, typename subsubsubtag>
void tk::Control<Ts>::store_back_back(const std::string& value)

Convert and push back value to vector of back of vector at tag at 3rd level.

Parameters
value in Value to convert and push back behind tag, subtag, and subsubtag given by the template arguments

template<typename... Ts> template<typename tag>
void tk::Control<Ts>::store_back_back_back(const std::string& value)

Convert and push back value to vector of back of vector of back of vector at tag at 1st level.

Parameters
value in Value to convert and push back behind tag given by the template arguments

template<typename... Ts> template<typename tag, typename subtag>
void tk::Control<Ts>::store_back_back_back(const std::string& value)

Convert and push back value to vector of back of vector of back of vector at tag at 2nd level.

Parameters
value in Value to convert and push back behind tag and subtag given by the template arguments

template<typename... Ts> template<typename tag, typename subtag, typename subsubtag>
void tk::Control<Ts>::store_back_back_back(const std::string& value)

Convert and push back value to vector of back of vector of back of vector at tag at 3rd level.

Parameters
value in Value to convert and push back behind tag, subtag, and subsubtag given by the template arguments

template<typename... Ts> template<typename tag, typename subtag, typename subsubtag, typename subsubsubtag>
void tk::Control<Ts>::store_back_back_back(const std::string& value)

Convert and push back value to vector of back of vector of back of vector at tag at 3rd level.

Parameters
value in Value to convert and push back behind tag, subtag, and subsubtag given by the template arguments

template<typename... Ts> template<typename tag>
void tk::Control<Ts>::insert(const typename Tuple::template nT<tag> ::key_type& key, const typename Tuple::template nT<tag> ::mapped_type& value = typename Tuple::template nT<tag> ::mapped_type())

Insert key-value pair to map at tag at 1st level using std::map::operator[].

Parameters
key in Key to insert to std::map behind tag given by the template argument
value in Value to insert to std::map behind tag given by the template argument; optional argument, if not given, use default constructor

template<typename... Ts> template<typename tag, typename subtag>
void tk::Control<Ts>::insert(const typename Tuple::template nT<tag> ::template nT<subtag> ::key_type& key, const typename Tuple::template nT<tag> ::template nT<subtag> ::mapped_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::mapped_type())

Insert key-value pair to map at tag at 2nd level using std::map::operator[].

Parameters
key in Key to insert to std::map behind tag and subtag given by the template arguments
value in Value to insert to std::map behind tag and subtag given by the template arguments; optional argument, if not given, use default constructor

template<typename... Ts> template<typename tag, typename subtag, typename subsubtag>
void tk::Control<Ts>::insert(const typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::key_type& key, const typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::mapped_type& value = typename Tuple::template nT<tag> ::template nT<subtag> ::template nT<subsubtag> ::mapped_type())

Insert key-value pair to map at tag at 3rd level using std::map::operator[].

Parameters
key in Key to insert to std::map behind tag, subtag, and subsubtag given by the template arguments
value in Value to insert to std::map behind tag, subtag, and subsubstag given by the template arguments; optional argument, if not given, use default constructor

template<typename... Ts> template<typename key_type, typename field, typename tag>
void tk::Control<Ts>::insert_field(const key_type& key, const std::string& value)

Insert key-value pair with converting value to map at tag at 1st level using std::map::operator[].

Parameters
key in Key to insert to std::map behind tag given by the template argument
value in Value to insert to std::map behind tag given by the template argument

This member function is used to set a value behind a field given by the field template argument of a tagged tuple that exist as a value of a std::map behind a key at the 1st level of Control object given by the tag template argument. The assumed hierarchy is: Control (this object) -> tag -> std::map< key_type, tagged_tuple > -> field = value. This is similar to insert_opt, but performs conversion.

template<typename... Ts> template<typename key_type, typename field, typename tag, typename subtag>
void tk::Control<Ts>::insert_field(const key_type& key, const std::string& value)

Insert key-value pair with converting value to map at tag at 2nd level using std::map::operator[].

Parameters
key in Key to insert to std::map behind tag and subtag given by the template arguments
value in Value to insert to std::map behind tag and subtag given by the template arguments

This member function is used to set a value behind a field given by the field template argument of a tagged tuple that exist as a value of a std::map behind a key at the 2nd level of Control object given by the tag and subtag template arguments. The assumed hierarchy is: Control (this object) -> tag -> subtag -> std::map< key_type, tagged_tuple > -> field = value. This is similar to insert_opt, but performs conversion.

template<typename... Ts> template<typename key_type, typename field, typename tag, typename subtag, typename subsubtag>
void tk::Control<Ts>::insert_field(const key_type key, const std::string& value)

Insert key-value pair with converting value to map at tag at 3rd level using std::map::operator[].

Parameters
key in Key to insert to std::map behind tag, subtag, and subsubtag given by the template arguments
value in Value to insert to std::map behind tag, subtag, and subsubtag given by the template arguments

This member function is used to set a value behind a field given by the field template argument of a tagged tuple that exist as a value of a std::map behind a key at the 3rd level of Control object given by the tag, subtag, and subsubtag template arguments. The assumed hierarchy is: Control (this object) -> tag -> subtag -> subsubtag -> std::map< key_type, tagged_tuple > -> field = value. This is similar to insert_opt, but performs conversion.

template<typename... Ts> template<typename key_type, typename field, typename field_type, typename tag>
void tk::Control<Ts>::insert_opt(const key_type& key, const field_type& value)

Insert value to field of tagged tuple behind a key of a map at tag at 1st level.

Parameters
key in Key used to access the std::map value using std::map::operator[], behind which a type that defines the get() member function (e.g., a tagged_tuple) is assumed to exist
value in Value to insert

This member function is used to set a value behind a field given by the field template argument of a tagged tuple that exist as a value of a std::map behind a key at the 1st level of Control object given by the tag template argument. The assumed hierarchy is: Control (this object) -> tag -> subtag -> std::map< key_type, tagged_tuple > -> field = value. This is similar to insert_field, but performs no conversion.

template<typename... Ts> template<typename key_type, typename field, typename field_type, typename tag, typename subtag>
void tk::Control<Ts>::insert_opt(const key_type& key, const field_type& value)

Insert value to field of tagged tuple behind a key of a map at tag at 2nd level.

Parameters
key in Key used to access the std::map value using std::map::operator[], behind which a type that defines the get() member function (e.g., a tagged_tuple) is assumed to exist
value in Value to insert

This member function is used to set a value behind a field given by the field template argument of a tagged tuple that exist as a value of a std::map behind a key at the 2nd level of Control object given by the tag and subtag template arguments. The assumed hierarchy is: Control (this object) -> tag -> subtag -> std::map< key_type, tagged_tuple > -> field = value. This is similar to insert_field, but performs no conversion.

template<typename... Ts> template<typename key_type, typename field, typename field_type, typename tag, typename subtag, typename subsubtag>
void tk::Control<Ts>::insert_opt(const key_type& key, const field_type& value)

Insert key-value pair with converting value to map at tag at 3rd level using std::map::operator[].

Parameters
key in Key to insert to std::map behind tag, subtag, and subsubtag given by the template arguments
value in Value to insert to std::map behind tag, subtag, and subsubtag given by the template arguments

This member function is used to set a value behind a field given by the field template argument of a tagged tuple that exist as a value of a std::map behind a key at the 3rd level of Control object given by the tag, subtag, and subsubtag template arguments. The assumed hierarchy is: Control (this object) -> tag -> subtag -> subsubtag -> std::map< key_type, tagged_tuple > -> field = value. This is similar to insert_field, but performs no conversion.

template<typename... Ts>
void tk::Control<Ts>::pup(PUP::er& p)

Pack/Unpack serialize member function.

Parameters
in/out Charm++'s PUP::er serializer object reference

template<typename... Ts>
void tk::Control<Ts>::operator|(PUP::er& p, Control<Ts...>& c)

Pack/Unpack serialize operator|.

Parameters
in/out Charm++'s PUP::er serializer object reference
in/out Control object reference