aboutsummaryrefslogtreecommitdiff
path: root/src/bigint.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-08-23 11:43:37 -0400
committerAndrew Kelley <andrew@ziglang.org>2019-08-23 11:43:37 -0400
commit3865b6ad8f8ba71dca06c81828ec2e29f3019879 (patch)
treecfadbebe532708c931bddcc8e5b262d63946c78d /src/bigint.cpp
parent79a4b7a2365dc50d01eb6bc29bbb77244a1620cf (diff)
parentec2f9ef4e8be5995ab652dde59b12ee340a9e28d (diff)
downloadzig-3865b6ad8f8ba71dca06c81828ec2e29f3019879.tar.gz
zig-3865b6ad8f8ba71dca06c81828ec2e29f3019879.zip
Merge remote-tracking branch 'origin/master' into fix-field-alignment-kludge
Diffstat (limited to 'src/bigint.cpp')
-rw-r--r--src/bigint.cpp23
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;