package sectr

Axis2 :: enum i32 {
	Invalid = -1,
	X       = 0,
	Y       = 1,
	Count,
}

is_power_of_two_u32 :: proc( value : u32 ) -> b32
{
	return value != 0 && ( value & ( value - 1 )) == 0
}

import "core:math/linalg"

Vec2 :: linalg.Vector2f32
Vec3 :: linalg.Vector3f32

Vec2i :: [2]i32
Vec3i :: [3]i32

Range2 :: struct #raw_union{
	using min_max : struct {
		min, max : Vec2
	},
	using pts : struct {
		p0, p1 : Vec2
	},
	using xy : struct {
		x0, y0 : f32,
		x1, y1 : f32,
	},
}

range2 :: #force_inline proc "contextless" ( a, b : Vec2 ) -> Range2 {
	result := Range2 { pts = { a, b } }
	return result
}

Rect :: struct {
	top_left, bottom_right : Vec2
}

add_range2 :: #force_inline proc "contextless" ( a, b : Range2 ) -> Range2 {
	result := Range2 { pts = {
		a.p0 + b.p0,
		a.p1 + b.p1,
	}}
	return result
}

equal_range2 :: #force_inline proc "contextless" ( a, b : Range2 ) -> b32 {
	result := a.p0 == b.p0 && a.p1 == b.p1
	return b32(result)
}


// // Translated intersect_2f32 function
// intersect_2f32 :: proc(a, b: Rng2F32) -> Rng2F32 {
// 	c: Rng2F32
// 	c.min.x = Max(a.min.x, b.min.x)
// 	c.min.y = Max(a.min.y, b.min.y)
// 	c.max.x = Min(a.max.x, b.max.x)
// 	c.max.y = Min(a.max.y, b.max.y)
// 	return c
// }



size_range2 :: #force_inline proc "contextless" ( value : Range2 ) -> Vec2 {
	return { value.p1.x - value.p0.x, value.p0.y - value.p1.y }
}