diff options
| author | gingerBill <bill@gingerbill.org> | 2021-12-09 15:34:35 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-12-09 15:34:35 +0000 |
| commit | 1e17d5d86f135d1c1f004a475a4700bd082773ba (patch) | |
| tree | 155ca84b68ebb9dbed06e03bc2c98aa24eeacc48 /core/math/big/internal.odin | |
| parent | 1e9b30666fc9ff462877b413a92d15d11870ec35 (diff) | |
Add utility procedures to get low values
Diffstat (limited to 'core/math/big/internal.odin')
| -rw-r--r-- | core/math/big/internal.odin | 29 |
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? |