aboutsummaryrefslogtreecommitdiff
path: root/core/math/big/internal.odin
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-12-09 15:34:35 +0000
committergingerBill <bill@gingerbill.org>2021-12-09 15:34:35 +0000
commit1e17d5d86f135d1c1f004a475a4700bd082773ba (patch)
tree155ca84b68ebb9dbed06e03bc2c98aa24eeacc48 /core/math/big/internal.odin
parent1e9b30666fc9ff462877b413a92d15d11870ec35 (diff)
Add utility procedures to get low values
Diffstat (limited to 'core/math/big/internal.odin')
-rw-r--r--core/math/big/internal.odin29
1 files changed, 29 insertions, 0 deletions
diff --git a/core/math/big/internal.odin b/core/math/big/internal.odin
index 4702e76a3..a5e1e7ba3 100644
--- a/core/math/big/internal.odin
+++ b/core/math/big/internal.odin
@@ -2307,6 +2307,35 @@ internal_int_get_i32 :: proc(a: ^Int) -> (res: i32, err: Error) {
}
internal_get_i32 :: proc { internal_int_get_i32, }
+internal_get_low_u32 :: proc(a: ^Int) -> u32 #no_bounds_check {
+ if a == nil {
+ return 0
+ }
+
+ if a.used == 0 {
+ return 0
+ }
+
+ return u32(a.digit[0])
+}
+internal_get_low_u64 :: proc(a: ^Int) -> u64 #no_bounds_check {
+ if a == nil {
+ return 0
+ }
+
+ if a.used == 0 {
+ return 0
+ }
+
+ v := u64(a.digit[0])
+ when size_of(DIGIT) == 4 {
+ if a.used > 1 {
+ return u64(a.digit[1])<<32 | v
+ }
+ }
+ return v
+}
+
/*
TODO: Think about using `count_bits` to check if the value could be returned completely,
and maybe return max(T), .Integer_Overflow if not?