#ifdef INTELLISENSE_DIRECTIVES
#	pragma once
#	include "base_types.h"
#endif

////////////////////////////////
//~ rjf: Basic Types & Spaces

typedef enum Dimension Dimension;
enum Dimension
{
	Dimension_X,
	Dimension_Y,
	Dimension_Z,
	Dimension_W,
};

typedef enum Side Side;
enum Side
{
	Side_Invalid = -1,
	Side_Min,
	Side_Max,
	Side_COUNT,
};
#define side_flip(s) ((Side)(!(s)))

typedef enum Axis2 Axis2;
enum Axis2
{
	Axis2_Invalid = -1,
	Axis2_X,
	Axis2_Y,
	Axis2_COUNT,
};
#define axis2_flip(a) ((Axis2)(!(a)))

typedef enum Corner Corner;
enum Corner
{
	Corner_Invalid = -1,
	Corner_00,
	Corner_01,
	Corner_10,
	Corner_11,
	Corner_COUNT
};

typedef enum Dir2 Dir2;
enum Dir2
{
	Dir2_Invalid = -1,
	Dir2_Left,
	Dir2_Up,
	Dir2_Right,
	Dir2_Down,
	Dir2_COUNT
};

#define axis2_from_dir2(d) (((d) & 1)          ? Axis2_Y  : Axis2_X)
#define side_from_dir2(d)  (((d) < Dir2_Right) ? Side_Min : Side_Max)

////////////////////////////////
//~ rjf: Enum -> Sign

inline S32 sign_from_side_S32(Side side) { return((side == Side_Min) ? -1   : 1  ); }
inline F32 sign_from_side_F32(Side side) { return((side == Side_Min) ? -1.f : 1.f); }
