6 #ifndef ECHELON_HDF5_CUSTOMIZATION_HOOKS_HPP 7 #define ECHELON_HDF5_CUSTOMIZATION_HOOKS_HPP 10 #include <echelon/object_reference.hpp> 12 #include <echelon/hdf5/object_reference.hpp> 13 #include <echelon/hdf5/precursor/object_reference.hpp> 14 #include <echelon/hdf5/precursor/handle.hpp> 16 #include <type_traits> 27 class coersion_protected_ref
30 coersion_protected_ref(T& value_) : value_{&value_}
48 inline const char* lower_type(coersion_protected_ref<const std::string> value)
50 return value.get().c_str();
53 inline std::string raise_type(
const char* value)
55 return std::string(value);
69 inline auto lower_type_internal(T&& value, precursor::handle)
70 -> decltype(lower_type(std::forward<T>(value)))
72 return lower_type(std::forward<T>(value));
76 inline auto raise_type_internal(T&& value, precursor::handle)
77 -> decltype(raise_type(std::forward<T>(value)))
79 return raise_type(std::forward<T>(value));
82 inline precursor::object_reference lower_type_internal(
const object_reference& value,
85 return value.raw_ref();
88 inline object_reference raise_type_internal(
const precursor::object_reference& value,
89 precursor::handle internal_handle)
91 return object_reference(value, internal_handle);
98 constexpr
auto is_trivially_storable_impl(
int)
99 -> decltype((lower_type_internal(std::declval<T>(), std::declval<precursor::handle>()),
105 template <
typename T>
106 constexpr
bool is_trivially_storable_impl(...)
112 template <
typename T>
113 constexpr
bool is_trivially_storable()
115 return detail::is_trivially_storable_impl<T>(0);
118 static_assert(!is_trivially_storable<std::string>(),
119 "std::string should not be trivially storable.");
echelon's core namespace
Definition: attribute.cpp:10
A reference to an HDF5 object.
Definition: object_reference.hpp:24
const hdf5::object_reference & raw_ref() const
The underlying low-level reference.
Definition: object_reference.hpp:47