Logging User Types#
#include <dplx/dlog/loggable.hpp>
namespace dplx::dlog {}
Concepts#
-
template<typename T>
concept loggable# Models the requirements for a type to be retirable to a log record, i.e. it has a (known) deeppack encoder and the type reification_type_of<T>::type satisfies reifiable.
-
template<typename T>
concept reifiable# Models the requirements for a type to be reifiable from a log record, i.e. it has a (known) deeppack decoder and a reification_type_id has been associated with it via reification_tag<T>.
Customization Points#
-
template<typename T>
reification_type_id reification_tag_v = reification_tag<T>::value#
-
template<typename T>
struct reification_tag# Associates an identifier with T which is used to discern retired types within log records.
User specializations are expected (but currently not required) to be derived from user_reification_type_constant.
There is no default identifier generation scheme due to the fact that it is impossible to generate cross-platform long-term-stable integer values based on the C++ type system alone.
-
template<typename T>
using reification_type_of_t = typename reification_type_of<T>::type#
Core Types#
-
enum class reification_type_id : std::uint64_t#
-
enumerator uint64#
-
enumerator int64#
-
enumerator float_single#
-
enumerator float_double#
-
enumerator string#
-
enumerator uint64#
-
inline constexpr reification_type_id user_defined_reification_flag#
This flag must be set for all type identifiers not provided by this library.
Utilities#
-
template<reification_type_id Id>
using reification_type_constant = std::integral_constant<reification_type_id, Id>#
-
template<std::uint64_t Id>
using user_reification_type_constant = reification_type_constant<make_user_reification_id(Id)>#
-
consteval auto make_user_reification_type_id(std::uint64_t id) noexcept -> reification_type_id#
Casts id to reification_type_id and marks it as user provided by setting user_defined_reification_flag.