aboutsummaryrefslogtreecommitdiff
path: root/ttt.jai
diff options
context:
space:
mode:
authordam <dam@gudinoff>2023-12-14 20:39:21 +0000
committerdam <dam@gudinoff>2023-12-14 20:39:21 +0000
commitef69c4f8daa14a580dd8bb442cae551f08711ca2 (patch)
treed274b447f439860c5f8d70dadff11f3b5856c3a2 /ttt.jai
parentf75b85e0dac3ee213b8d77cec8f1669881f99d18 (diff)
parent47890a446f1b9827fe2dc8ac370ded9d91ed2247 (diff)
downloadtask-time-tracker-ef69c4f8daa14a580dd8bb442cae551f08711ca2.tar.zst
task-time-tracker-ef69c4f8daa14a580dd8bb442cae551f08711ca2.zip
Merge changes from black and red.
Diffstat (limited to 'ttt.jai')
-rw-r--r--ttt.jai60
1 files changed, 60 insertions, 0 deletions
diff --git a/ttt.jai b/ttt.jai
index f0b554f..25bf782 100644
--- a/ttt.jai
+++ b/ttt.jai
@@ -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();