diff options
Diffstat (limited to 'ttt.jai')
| -rw-r--r-- | ttt.jai | 60 |
1 files changed, 60 insertions, 0 deletions
@@ -1185,6 +1185,66 @@ main :: () { // TODO Test input + Key :: union { + text: [4] u8; + code: u64; + } + + // Instead of checking if it's an array or string... check the type is array of u8. + to_key :: inline (value: $T) -> Key #modify { return T == u8 || T == string || (T == []u8); } { + k: Key; + #if T == u8 { + k.text[0] = value; + } + #if T == string || (T == []u8) { + assert(value.count <= 4); + for 0..value.count-1 k.text[it] = value[it]; + } + return k; + } + + operator == :: inline (a: Key, b: Key) -> bool { + return a.code == b.code; + } + + // Instead of checking if it's an array or string... check the type is array of u8. + // We'll need to use "Type_Info" and "Type_Info_Array" + // and cast T using `type_info := cast(*Type_Info)T;` + operator == :: inline (a: Key, b: $T) -> bool + #modify { + if T == u8 { + return true; + } + ti := cast(*Type_Info)T; + if ti.type == .ARRAY { + ti_array := cast(*Type_Info_Array)T; + // tia_type := ti_array.element_type.type; + return ti_array.element_type.type == .INTEGER && ti_array.element_type.runtime_size == 1; + } + return false; + // return T == u8 || T == string || (T == []u8); } { + } { + // operator == :: inline (a: Key, b: $T) -> bool #modify { return (T == [4]u8); } { + k := to_key(b); + return a == k; + } + + // k := K. {xx "01"}; + // k := to_key(xx "\0\0\01"); + // k := to_key(xx "€"); + // k := to_key(xx "A"); + k := to_key("A"); + // a: u8 = #char "A"; + a: [4]u8; + a[0] = #char "A"; + print("Is equal to 'A': >%<\n", k == a); + // b: u8 = 3; + // print("Is equal to 'A': >%<\n", k == #char); + print("Text :>%<\n", cast(string)k.text, to_standard_error = true); + print("Key :>%<\n", FormatInt.{value=k.code, base=16, minimum_digits=8}, to_standard_error = true); + return; + + if 1 { print("TEST : set and get cursor position --\n", to_standard_error = true); TUI.start(); |
