aboutsummaryrefslogtreecommitdiffstats
path: root/nihil.ucl/real.cc
diff options
context:
space:
mode:
authorLexi Winter <lexi@le-fay.org>2025-07-01 17:07:04 +0100
committerLexi Winter <lexi@le-fay.org>2025-07-01 17:07:04 +0100
commit2e2d1bd3b6c7776b77c33b94f30ead89367a71e6 (patch)
tree54d37ffadf8e677938d9b7a28e4e9b71be1e75c1 /nihil.ucl/real.cc
parent36427c0966faa7aecd586b397ed9b845f18172f5 (diff)
downloadnihil-2e2d1bd3b6c7776b77c33b94f30ead89367a71e6.tar.gz
nihil-2e2d1bd3b6c7776b77c33b94f30ead89367a71e6.tar.bz2
add nihil.std
Diffstat (limited to 'nihil.ucl/real.cc')
-rw-r--r--nihil.ucl/real.cc104
1 files changed, 0 insertions, 104 deletions
diff --git a/nihil.ucl/real.cc b/nihil.ucl/real.cc
deleted file mode 100644
index 6d9e082..0000000
--- a/nihil.ucl/real.cc
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * This source code is released into the public domain.
- */
-
-module;
-
-#include <cassert>
-#include <compare>
-#include <cstdlib>
-#include <expected>
-#include <string>
-#include <system_error>
-
-#include <ucl.h>
-
-module nihil.ucl;
-
-import nihil.error;
-
-namespace nihil::ucl {
-
-auto make_real(real::contained_type value)
- -> std::expected<real, error>
-{
- auto *uobj = ::ucl_object_fromdouble(value);
- if (uobj == nullptr)
- return std::unexpected(error(
- errc::failed_to_create_object,
- error(std::errc(errno))));
-
- return real(noref, uobj);
-}
-
-real::real()
- : real(0)
-{
-}
-
-real::real(contained_type value)
- : real(noref, [&] {
- auto *uobj = ::ucl_object_fromdouble(value);
- if (uobj == nullptr)
- throw std::system_error(
- std::make_error_code(std::errc(errno)));
- return uobj;
- }())
-{
-}
-
-real::real(ref_t, ::ucl_object_t const *uobj)
- : object(nihil::ucl::ref, [&] {
- auto actual_type = static_cast<object_type>(
- ::ucl_object_type(uobj));
- if (actual_type != real::ucl_type)
- throw type_mismatch(real::ucl_type, actual_type);
- return uobj;
- }())
-{
-}
-
-real::real(noref_t, ::ucl_object_t *uobj)
- : object(nihil::ucl::noref, [&] {
- auto actual_type = static_cast<object_type>(
- ::ucl_object_type(uobj));
- if (actual_type != real::ucl_type)
- throw type_mismatch(real::ucl_type, actual_type);
- return uobj;
- }())
-{
-}
-
-auto real::value(this real const &self) -> contained_type
-{
- auto v = contained_type{};
- auto const *uobj = self.get_ucl_object();
-
- if (::ucl_object_todouble_safe(uobj, &v))
- return v;
-
- std::abort();
-}
-
-auto operator== (real const &a, real const &b) -> bool
-{
- return a.value() == b.value();
-}
-
-auto operator<=> (real const &a, real const &b) -> std::partial_ordering
-{
- return a.value() <=> b.value();
-}
-
-auto operator== (real const &a, real::contained_type b) -> bool
-{
- return a.value() == b;
-}
-
-auto operator<=> (real const &a, real::contained_type b)
- -> std::partial_ordering
-{
- return a.value() <=> b;
-}
-
-} // namespace nihil::ucl