return false;
}
+array_pop :: proc (arr: ^[..] $T) -> T {
+ arr.count -= 1;
+ return arr.data[arr.count];
+}
+
+array_average :: proc (arr: ^[..] $T) -> T {
+ sum := cast(T) 0;
+ for i: 0, arr.count {
+ sum += arr.data[i];
+ }
+
+ return sum / cast(T) arr.count;
+}
+
+
context : struct {
allocator : Allocator;
temp_allocator : Allocator;
return string.{ data = c + 1, count = len };
}
-string_builder_add_u64 :: proc (use sb: ^StringBuilder, n: u64, base := 10l) -> ^StringBuilder {
+string_builder_add_i64 :: proc (use sb: ^StringBuilder, n: i64, base := 10l) -> ^StringBuilder {
buf : [256] u8;
s := i64_to_string(n, base, Buffer.{ cast(rawptr) buf, 256 });
return string_builder_add_string(sb, s);
string_builder_append :: proc #overloaded {
string_builder_add_string,
string_builder_add_cstring,
- string_builder_add_u64,
+ string_builder_add_i64,
string_builder_add_bool,
}
print("\n");
}
+print_vec_arr :: proc (arr: ^[..] Vec3) {
+ for i: 0, arr.count {
+ print("Vec3(");
+ print(arr.data[i].x);
+ print(", ");
+ print(arr.data[i].y);
+ print(", ");
+ print(arr.data[i].z);
+ print(")\n");
+ }
+
+ print("\n");
+}
+
main :: proc (args: [] cstring) {
+ print(cast(u32) __heap_start, 16);
+
iarr : [..] i32;
array_init(^iarr, 24);
defer array_free(^iarr);
print_arr_details(^iarr);
print_arr(^iarr);
+ print(array_average(^iarr));
+ print("\n");
array_init(^barr, 10);
defer array_free(^barr);
- for i: 0, 1000 {
+ for i: 0, 500 {
array_add(^barr, cast(u64) (3 * i * i + 4 * i - 2));
}
print_arr_details(^barr);
print_arr(^barr);
+ print(array_average(^barr));
+ print("\n");
- print("Does the array contain 2638? ");
- print(array_contains(^barr, 2638l));
+ print("Does the array contain 2637? ");
+ print(array_contains(^barr, 2637l));
print("\n");
+
+
+
+ varr : [..] Vec3;
+ array_init(^varr);
+ defer array_free(^varr);
+
+ for i: 0, 20 {
+ array_add(^varr, Vec3.{ i, i * i, i * i * i });
+ }
+
+ print_arr_details(^varr);
+ print_vec_arr(^varr);
+}
+
+Vec3 :: struct {
+ x: i32;
+ y: i32;
+ z: i32;
}
\ No newline at end of file
// With expected precedence rules
static AstTyped* parse_expression(OnyxParser* parser) {
bh_arr(AstBinaryOp*) tree_stack = NULL;
- bh_arr_new(global_scratch_allocator, tree_stack, 4);
+ bh_arr_new(global_heap_allocator, tree_stack, 4);
bh_arr_set_length(tree_stack, 0);
AstTyped* left = parse_factor(parser);
}
}
+ bh_arr_free(tree_stack);
+
expression_done:
return root;
}