aboutsummaryrefslogtreecommitdiff
path: root/core/strconv/generic_float.odin
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2019-12-21 11:22:46 +0000
committergingerBill <bill@gingerbill.org>2019-12-21 11:22:46 +0000
commit494b1e7eaa0368f95fa7bd6d993a2f3ecec831ea (patch)
treec1d3c07aa31eea60ad85f868af57f017ddd179d3 /core/strconv/generic_float.odin
parentc43d17bfec9cc99f4d282fe05c5579e318825c2a (diff)
Add `-help` which prints information about the compiler flags
Diffstat (limited to 'core/strconv/generic_float.odin')
-rw-r--r--core/strconv/generic_float.odin158
1 files changed, 0 insertions, 158 deletions
diff --git a/core/strconv/generic_float.odin b/core/strconv/generic_float.odin
index e4784a2e5..99830ad30 100644
--- a/core/strconv/generic_float.odin
+++ b/core/strconv/generic_float.odin
@@ -2,13 +2,6 @@ package strconv
using import "decimal"
-Int_Flag :: enum {
- Prefix,
- Plus,
- Space,
-}
-Int_Flags :: bit_set[Int_Flag];
-
Decimal_Slice :: struct {
digits: []byte,
count: int,
@@ -286,154 +279,3 @@ round_shortest :: proc(d: ^Decimal, mant: u64, exp: int, flt: ^Float_Info) {
}
}
-
-MAX_BASE :: 32;
-digits := "0123456789abcdefghijklmnopqrstuvwxyz";
-
-
-is_integer_negative :: proc(x: u64, is_signed: bool, bit_size: int) -> (u: u64, neg: bool) {
- u = x;
- if is_signed {
- switch bit_size {
- case 8:
- i := i8(u);
- neg = i < 0;
- u = u64(abs(i64(i)));
- case 16:
- i := i16(u);
- neg = i < 0;
- u = u64(abs(i64(i)));
- case 32:
- i := i32(u);
- neg = i < 0;
- u = u64(abs(i64(i)));
- case 64:
- i := i64(u);
- neg = i < 0;
- u = u64(abs(i64(i)));
- case:
- panic("is_integer_negative: Unknown integer size");
- }
- }
- return;
-}
-
-append_bits :: proc(buf: []byte, x: u64, base: int, is_signed: bool, bit_size: int, digits: string, flags: Int_Flags) -> string {
- if base < 2 || base > MAX_BASE {
- panic("strconv: illegal base passed to append_bits");
- }
-
- a: [129]byte;
- i := len(a);
- u, neg := is_integer_negative(x, is_signed, bit_size);
- b := u64(base);
- for u >= b {
- i-=1; a[i] = digits[u % b];
- u /= b;
- }
- i-=1; a[i] = digits[u % b];
-
- if .Prefix in flags {
- ok := true;
- switch base {
- case 2: i-=1; a[i] = 'b';
- case 8: i-=1; a[i] = 'o';
- case 10: i-=1; a[i] = 'd';
- case 12: i-=1; a[i] = 'z';
- case 16: i-=1; a[i] = 'x';
- case: ok = false;
- }
- if ok {
- i-=1; a[i] = '0';
- }
- }
-
- switch {
- case neg:
- i-=1; a[i] = '-';
- case .Plus in flags:
- i-=1; a[i] = '+';
- case .Space in flags:
- i-=1; a[i] = ' ';
- }
-
- out := a[i:];
- copy(buf, out);
- return string(buf[0:len(out)]);
-}
-
-is_integer_negative_128 :: proc(x: u128, is_signed: bool, bit_size: int) -> (u: u128, neg: bool) {
- u = x;
- if is_signed {
- switch bit_size {
- case 8:
- i := i8(u);
- neg = i < 0;
- u = u128(abs(i128(i)));
- case 16:
- i := i16(u);
- neg = i < 0;
- u = u128(abs(i128(i)));
- case 32:
- i := i32(u);
- neg = i < 0;
- u = u128(abs(i128(i)));
- case 64:
- i := i64(u);
- neg = i < 0;
- u = u128(abs(i128(i)));
- case 128:
- i := i128(u);
- neg = i < 0;
- u = u128(abs(i128(i)));
- case:
- panic("is_integer_negative: Unknown integer size");
- }
- }
- return;
-}
-
-
-append_bits_128 :: proc(buf: []byte, x: u128, base: int, is_signed: bool, bit_size: int, digits: string, flags: Int_Flags) -> string {
- if base < 2 || base > MAX_BASE {
- panic("strconv: illegal base passed to append_bits");
- }
-
- a: [140]byte;
- i := len(a);
- u, neg := is_integer_negative_128(x, is_signed, bit_size);
- b := u128(base);
- for u >= b {
- i-=1; a[i] = digits[u % b];
- u /= b;
- }
- i-=1; a[i] = digits[u % b];
-
- if .Prefix in flags {
- ok := true;
- switch base {
- case 2: i-=1; a[i] = 'b';
- case 8: i-=1; a[i] = 'o';
- case 10: i-=1; a[i] = 'd';
- case 12: i-=1; a[i] = 'z';
- case 16: i-=1; a[i] = 'x';
- case: ok = false;
- }
- if ok {
- i-=1; a[i] = '0';
- }
- }
-
- switch {
- case neg:
- i-=1; a[i] = '-';
- case .Plus in flags:
- i-=1; a[i] = '+';
- case .Space in flags:
- i-=1; a[i] = ' ';
- }
-
- out := a[i:];
- copy(buf, out);
- return string(buf[0:len(out)]);
-}