diff options
| author | Jonathan Marler <jonathan.j.marler@hp.com> | 2019-08-22 13:56:04 -0600 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-08-23 11:14:08 -0400 |
| commit | 9322eee80aadd6d9f80ebc11d29d09898237a14a (patch) | |
| tree | c8848c067244ee16f9cd5525a366d4bb451ae474 /src/bigint.cpp | |
| parent | 0e75fef1decdaba918b2abc84977ecadb010ad32 (diff) | |
| download | zig-9322eee80aadd6d9f80ebc11d29d09898237a14a.tar.gz zig-9322eee80aadd6d9f80ebc11d29d09898237a14a.zip | |
Encapsulate bigint representation, assert on cast data loss
Diffstat (limited to 'src/bigint.cpp')
| -rw-r--r-- | src/bigint.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
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 <limits> #include <algorithm> +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; |
