hashes[lr.hash_index] = entries.count - 1;
}
+#operator << macro (set: Set($T), value: T) do (package core.set).insert(^set, value);
+
has :: (use set: ^Set($T), value: T) -> bool {
lr := lookup(set, value);
return lr.entry_index >= 0;
switch mode {
case .Write {
open_flags |= OFlags.Creat | OFlags.Trunc;
- rights |= Rights.Write;
+ rights |= Rights.Write | Rights.Seek | Rights.Tell;
}
case .Append {
open_flags |= OFlags.Creat;
- rights |= Rights.Write;
+ rights |= Rights.Write | Rights.Seek | Rights.Tell;
fd_flags |= FDFlags.Append;
}
}
make_slice :: ($T: type_expr, count: i32, allocator := context.allocator) -> [] T {
- return <[] T>.{
+ return .{
data = raw_alloc(allocator, sizeof T * count),
count = count
};
sl.count = 0;
}
+copy_slice :: (sl: [] $T, allocator := context.allocator) -> [] T {
+ data := raw_alloc(allocator, sl.count * sizeof T);
+ copy(data, sl.data, sl.count * sizeof T);
+
+ return .{ data = data, count = sl.count };
+}
+
align :: #match {
(size: ^u64, align: u64) {
if *size % align != 0 {
return true;
}
-
strip_leading_whitespace :: #match {
(s: ^str) {
while true do switch s.data[0] {
#private
scrollable_region_states : map.Map(UI_Id, Scrollable_Region_State);
-scrollable_region_start :: (use r: Rectangle, minimum_y := 0.0f, maximum_y := 10000.0f, site := #callsite, state: ^Scrollable_Region_State = null) {
+Scrollable_Region_Controls :: struct {
+ minimum_y := 0.0f;
+ maximum_y := 10000.0f; // Senseless default
+ minimum_x := 0.0f;
+ maximum_x := 10000.0f; // Senseless default
+}
+
+scrollable_region_start :: (use r: Rectangle, use src: Scrollable_Region_Controls = .{},
+ site := #callsite, state: ^Scrollable_Region_State = null) {
hash := get_site_hash(site, 0);
x, y := Rectangle.top_left(r);
width, height := Rectangle.dimensions(r);
if is_key_down(38) do state.transform.translation.y += speed;
if is_key_down(40) do state.transform.translation.y -= speed;
+ if is_key_down(37) do state.transform.translation.x -= speed;
+ if is_key_down(39) do state.transform.translation.x += speed;
if mouse_state.dwheel > 0 do state.transform.translation.y += speed;
if mouse_state.dwheel < 0 do state.transform.translation.y -= speed;
state.transform.translation.y = math.clamp(state.transform.translation.y, -maximum_y, minimum_y);
+ state.transform.translation.x = math.clamp(state.transform.translation.x, -maximum_x, minimum_x);
}
gfx.push_scissor(x, y, width, height);
Type* from = from_;
Type* to = to_;
+ if (from == NULL) {
+ if (err_msg) *err_msg = "'from' is null. (Compiler Error)";
+ return 0;
+ }
+ if (to == NULL) {
+ if (err_msg) *err_msg = "'to' is null. (Compiler Error)";
+ return 0;
+ }
+
if (from->kind == Type_Kind_Enum) from = from->Enum.backing;
if (to->kind == Type_Kind_Enum) to = to->Enum.backing;
case Ast_Kind_Polymorphic_Proc:
case Ast_Kind_Alias:
case Ast_Kind_Code_Block:
+ case Ast_Kind_Macro:
return 0;
default: return 1;