17#include <peak_common_c/detail/peak_common_defines.h>
19#include <unordered_map>
59 m_data[key] =
Any(std::forward<T>(value));
75 template <MetadataKey metadataKey,
typename T>
79 std::is_convertible<T, typename detail::MetadataKeyTraits<metadataKey>::type>::value,
"Incorrect value type for metadata key");
81 detail::MetadataKeyTraits<metadataKey>::Name(),
static_cast<typename detail::MetadataKeyTraits<metadataKey>::type
>(value));
94 return m_data.find(name) != m_data.end();
107 template <MetadataKey metadataKey>
110 using trait = detail::MetadataKeyTraits<metadataKey>;
116 return hasCorrectType;
137 return m_data.at(key);
153 template <
typename T>
179 template <MetadataKey metadataKey>
180 PEAK_COMMON_NO_DISCARD
typename detail::MetadataKeyTraits<metadataKey>::type
GetValueByKey()
const
182 using trait = detail::MetadataKeyTraits<metadataKey>;
201 for (
const auto& pair : metadata.m_data)
209 os <<
" \"" << pair.first <<
"\"";
227 PEAK_COMMON_NO_DISCARD std::string
ToString()
const
229 std::ostringstream ss;
241 PEAK_COMMON_NO_DISCARD std::vector<std::string>
GetKeyNames()
const
243 std::vector<std::string> keys;
244 keys.reserve(m_data.size());
245 std::transform(m_data.cbegin(), m_data.cend(), std::back_inserter(keys), [](
const auto& pair) {
253 std::unordered_map<std::string, Any> m_data;
A type-erased container for any copyable value.
const std::type_info & GetType() const
Gets the type of the stored value.
T & AnyCast()
Casts the stored value to the specified type.
Thrown when a parameter is outside the valid range.