11#ifndef MODDEF_VALUE_HPP
12#define MODDEF_VALUE_HPP
21#include "moddef/codec.h"
41 explicit Value(md_value_t v) noexcept : v_(v) {}
44 const md_value_t&
raw() const noexcept {
return v_; }
46 bool is_unavailable() const noexcept {
return v_.kind == MD_VAL_UNAVAILABLE; }
53 std::optional<double>
as_f64() const noexcept {
55 case MD_VAL_F64:
return v_.v.f64;
56 case MD_VAL_U64:
return static_cast<double>(v_.v.u64);
57 case MD_VAL_I64:
return static_cast<double>(v_.v.i64);
58 case MD_VAL_BOOL:
return v_.v.b ? 1.0 : 0.0;
59 default:
return std::nullopt;
63 std::optional<std::int64_t>
as_i64() const noexcept {
65 case MD_VAL_I64:
return v_.v.i64;
66 case MD_VAL_U64:
return static_cast<std::int64_t
>(v_.v.u64);
67 case MD_VAL_BOOL:
return v_.v.b ? 1 : 0;
68 case MD_VAL_DATETIME:
return v_.v.epoch;
69 default:
return std::nullopt;
73 std::optional<std::uint64_t>
as_u64() const noexcept {
74 if (v_.kind == MD_VAL_U64)
return v_.v.u64;
78 std::optional<bool>
as_bool() const noexcept {
79 if (v_.kind == MD_VAL_BOOL)
return v_.v.b;
84 std::optional<std::uint64_t>
as_bits() const noexcept {
85 if (v_.kind == MD_VAL_FLAGS || v_.kind == MD_VAL_FIELDS)
return v_.v.bits;
91 if (v_.kind == MD_VAL_DATETIME)
return v_.v.epoch;
A decoded point value: a typed view over the C core's md_value_t.
Definition value.hpp:38
Value(md_value_t v) noexcept
Definition value.hpp:41
ValueKind kind() const noexcept
Definition value.hpp:43
const md_value_t & raw() const noexcept
Definition value.hpp:44
bool is_unavailable() const noexcept
Definition value.hpp:46
std::optional< std::uint64_t > as_bits() const noexcept
Definition value.hpp:84
std::optional< bool > as_bool() const noexcept
Definition value.hpp:78
std::optional< std::uint64_t > as_u64() const noexcept
Definition value.hpp:73
std::optional< std::int64_t > as_i64() const noexcept
Definition value.hpp:63
std::optional< double > as_f64() const noexcept
Definition value.hpp:53
std::optional< std::int64_t > as_datetime() const noexcept
Definition value.hpp:90
std::string_view unavailable_meaning() const noexcept
Definition value.hpp:49
ValueKind
Definition value.hpp:26
Error from_c(md_err_t e) noexcept
Definition error.hpp:46
std::string_view <-> md_str_t bridging.