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);
}
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";