Endian specific integers: e.g. i32 i32le i32be

This commit is contained in:
gingerBill
2018-12-02 15:53:52 +00:00
parent 784c48c9e3
commit 00161023cd
7 changed files with 278 additions and 49 deletions
+15
View File
@@ -3,6 +3,7 @@ package fmt
import "core:runtime"
import "core:os"
import "core:mem"
import "core:bits"
import "core:unicode/utf8"
import "core:types"
import "core:strconv"
@@ -1279,6 +1280,20 @@ fmt_arg :: proc(fi: ^Fmt_Info, arg: any, verb: rune) {
case typeid: write_typeid(fi.buf, a);
case i16le: fmt_int(fi, u64(a), true, 16, verb);
case u16le: fmt_int(fi, u64(a), false, 16, verb);
case i32le: fmt_int(fi, u64(a), true, 32, verb);
case u32le: fmt_int(fi, u64(a), false, 32, verb);
case i64le: fmt_int(fi, u64(a), true, 64, verb);
case u64le: fmt_int(fi, u64(a), false, 64, verb);
case i16be: fmt_int(fi, u64(a), true, 16, verb);
case u16be: fmt_int(fi, u64(a), false, 16, verb);
case i32be: fmt_int(fi, u64(a), true, 32, verb);
case u32be: fmt_int(fi, u64(a), false, 32, verb);
case i64be: fmt_int(fi, u64(a), true, 64, verb);
case u64be: fmt_int(fi, u64(a), false, 64, verb);
case: fmt_value(fi, arg, verb);
}
+7 -1
View File
@@ -40,9 +40,15 @@ Type_Info_Enum_Value :: union {
u8, u16, u32, u64, uint, uintptr,
};
Type_Info_Endianness :: enum u8 {
Platform = 0,
Little = 1,
Big = 2,
}
// Variant Types
Type_Info_Named :: struct {name: string, base: ^Type_Info};
Type_Info_Integer :: struct {signed: bool};
Type_Info_Integer :: struct {signed: bool, endianness: Type_Info_Endianness};
Type_Info_Rune :: struct {};
Type_Info_Float :: struct {};
Type_Info_Complex :: struct {};