From 9322eee80aadd6d9f80ebc11d29d09898237a14a Mon Sep 17 00:00:00 2001 From: Jonathan Marler Date: Thu, 22 Aug 2019 13:56:04 -0600 Subject: Encapsulate bigint representation, assert on cast data loss --- src/bigint.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src/bigint.cpp') diff --git a/src/bigint.cpp b/src/bigint.cpp index da53a2b129..b227b3b4f7 100644 --- a/src/bigint.cpp +++ b/src/bigint.cpp @@ -15,6 +15,8 @@ #include #include +static uint64_t bigint_as_unsigned(const BigInt *bigint); + static void bigint_normalize(BigInt *dest) { const uint64_t *digits = bigint_ptr(dest); @@ -1660,7 +1662,7 @@ size_t bigint_clz(const BigInt *bi, size_t bit_count) { return count; } -uint64_t bigint_as_unsigned(const BigInt *bigint) { +static uint64_t bigint_as_unsigned(const BigInt *bigint) { assert(!bigint->is_negative); if (bigint->digit_count == 0) { return 0; @@ -1671,6 +1673,25 @@ uint64_t bigint_as_unsigned(const BigInt *bigint) { } } +uint64_t bigint_as_u64(const BigInt *bigint) +{ + return bigint_as_unsigned(bigint); +} + +uint32_t bigint_as_u32(const BigInt *bigint) { + uint64_t value64 = bigint_as_unsigned(bigint); + uint32_t value32 = (uint32_t)value64; + assert (value64 == value32); + return value32; +} + +size_t bigint_as_usize(const BigInt *bigint) { + uint64_t value64 = bigint_as_unsigned(bigint); + size_t valueUsize = (size_t)value64; + assert (value64 == valueUsize); + return valueUsize; +} + int64_t bigint_as_signed(const BigInt *bigint) { if (bigint->digit_count == 0) { return 0; -- cgit v1.2.3