added read_u64 and fold_slice
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 9 Dec 2020 14:59:46 +0000 (08:59 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 9 Dec 2020 14:59:46 +0000 (08:59 -0600)
core/array.onyx
core/string/reader.onyx

index 5407dcd3fcf82733e2ceebfa96bba4c812bb6c72..b367d3a50cf9c463011c508db5c51d5c71c1671c 100644 (file)
@@ -119,6 +119,13 @@ fold :: proc (arr: ^[..] $T, init: $R, f: proc (T, R) -> R) -> R {
     return val;
 }
 
+// CLEANUP: :slice Move this elsewhere when more slice functionality is added
+fold_slice :: proc (arr: [] $T, init: $R, f: proc (T, R) -> R) -> R {
+    val := init;
+    for it: arr do val = f(it, val);
+    return val;
+}
+
 map :: proc (arr: ^[..] $T, data: $R, f: proc (T, R) -> T) {
     for ^it: *arr do *it = f(*it, data);
 }
index 83485706b25ce40b6772e6fc75e6690e0f4085c6..5cf797a4db9039938910a05f9b5139ac1bcee539 100644 (file)
@@ -43,6 +43,22 @@ read_u32 :: proc (use reader: ^StringReader) -> u32 {
     return n;
 }
 
+read_u64 :: proc (use reader: ^StringReader) -> u64 {
+    n: u64 = 0;
+
+    skip_whitespace(reader);
+
+    while count > 0 && data[0] >= #char "0" && data[0] <= #char "9" {
+        n *= 10;
+        n += cast(u64) (data[0] - #char "0");
+
+        data += 1;
+        count -= 1;
+    }
+
+    return n;
+}
+
 read_byte :: proc (use reader: ^StringReader) -> u8 {
     if count == 0 do return #char "\0";