Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 108 additions & 0 deletions la.h
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,13 @@ typedef union {

#define V2f_Fmt "v2f(%f, %f)"
#define V2f_Arg(v) (v).x, (v).y
#define M2f_Fmt "m2f(\n" \
" %f, %f,\n" \
" %f, %f\n" \
")"
#define M2f_Arg(m) \
(m)._11, (m)._12, \
(m)._21, (m)._22
LADEF V2f v2f(float x, float y);
LADEF V2f v2ff(float x);
LADEF V2f v2f2d(V2d a);
Expand Down Expand Up @@ -280,6 +287,13 @@ LADEF M2f m2f_rot(float angle);

#define V2d_Fmt "v2d(%lf, %lf)"
#define V2d_Arg(v) (v).x, (v).y
#define M2d_Fmt "m2d(\n" \
" %lf, %lf,\n" \
" %lf, %lf\n" \
")"
#define M2d_Arg(m) \
(m)._11, (m)._12, \
(m)._21, (m)._22
LADEF V2d v2d(double x, double y);
LADEF V2d v2dd(double x);
LADEF V2d v2d2f(V2f a);
Expand Down Expand Up @@ -323,6 +337,13 @@ LADEF M2d m2d_rot(double angle);

#define V2i_Fmt "v2i(%d, %d)"
#define V2i_Arg(v) (v).x, (v).y
#define M2i_Fmt "m2i(\n" \
" %d, %d,\n" \
" %d, %d\n" \
")"
#define M2i_Arg(m) \
(m)._11, (m)._12, \
(m)._21, (m)._22
LADEF V2i v2i(int x, int y);
LADEF V2i v2ii(int x);
LADEF V2i v2i2f(V2f a);
Expand Down Expand Up @@ -356,6 +377,13 @@ LADEF V2i m2i_mul_vec(M2i m, V2i v);

#define V2u_Fmt "v2u(%u, %u)"
#define V2u_Arg(v) (v).x, (v).y
#define M2u_Fmt "m2u(\n" \
" %u, %u,\n" \
" %u, %u\n" \
")"
#define M2u_Arg(m) \
(m)._11, (m)._12, \
(m)._21, (m)._22
LADEF V2u v2u(unsigned int x, unsigned int y);
LADEF V2u v2uu(unsigned int x);
LADEF V2u v2u2f(V2f a);
Expand Down Expand Up @@ -389,6 +417,15 @@ LADEF V2u m2u_mul_vec(M2u m, V2u v);

#define V3f_Fmt "v3f(%f, %f, %f)"
#define V3f_Arg(v) (v).x, (v).y, (v).z
#define M3f_Fmt "m3f(\n" \
" %f, %f, %f,\n" \
" %f, %f, %f,\n" \
" %f, %f, %f\n" \
")"
#define M3f_Arg(m) \
(m)._11, (m)._12, (m)._13, \
(m)._21, (m)._22, (m)._23, \
(m)._31, (m)._32, (m)._33
LADEF V3f v3f(float x, float y, float z);
LADEF V3f v3ff(float x);
LADEF V3f v3f2f(V2f a);
Expand Down Expand Up @@ -435,6 +472,15 @@ LADEF M3f m3f_rot_z(float angle);

#define V3d_Fmt "v3d(%lf, %lf, %lf)"
#define V3d_Arg(v) (v).x, (v).y, (v).z
#define M3d_Fmt "m3d(\n" \
" %lf, %lf, %lf,\n" \
" %lf, %lf, %lf,\n" \
" %lf, %lf, %lf\n" \
")"
#define M3d_Arg(m) \
(m)._11, (m)._12, (m)._13, \
(m)._21, (m)._22, (m)._23, \
(m)._31, (m)._32, (m)._33
LADEF V3d v3d(double x, double y, double z);
LADEF V3d v3dd(double x);
LADEF V3d v3d2f(V2f a);
Expand Down Expand Up @@ -481,6 +527,15 @@ LADEF M3d m3d_rot_z(double angle);

#define V3i_Fmt "v3i(%d, %d, %d)"
#define V3i_Arg(v) (v).x, (v).y, (v).z
#define M3i_Fmt "m3i(\n" \
" %d, %d, %d,\n" \
" %d, %d, %d,\n" \
" %d, %d, %d\n" \
")"
#define M3i_Arg(m) \
(m)._11, (m)._12, (m)._13, \
(m)._21, (m)._22, (m)._23, \
(m)._31, (m)._32, (m)._33
LADEF V3i v3i(int x, int y, int z);
LADEF V3i v3ii(int x);
LADEF V3i v3i2f(V2f a);
Expand Down Expand Up @@ -515,6 +570,15 @@ LADEF V3i m3i_mul_vec(M3i m, V3i v);

#define V3u_Fmt "v3u(%u, %u, %u)"
#define V3u_Arg(v) (v).x, (v).y, (v).z
#define M3u_Fmt "m3u(\n" \
" %u, %u, %u,\n" \
" %u, %u, %u,\n" \
" %u, %u, %u\n" \
")"
#define M3u_Arg(m) \
(m)._11, (m)._12, (m)._13, \
(m)._21, (m)._22, (m)._23, \
(m)._31, (m)._32, (m)._33
LADEF V3u v3u(unsigned int x, unsigned int y, unsigned int z);
LADEF V3u v3uu(unsigned int x);
LADEF V3u v3u2f(V2f a);
Expand Down Expand Up @@ -549,6 +613,17 @@ LADEF V3u m3u_mul_vec(M3u m, V3u v);

#define V4f_Fmt "v4f(%f, %f, %f, %f)"
#define V4f_Arg(v) (v).x, (v).y, (v).z, (v).w
#define M4f_Fmt "m4f(\n" \
" %f, %f, %f, %f,\n" \
" %f, %f, %f, %f,\n" \
" %f, %f, %f, %f,\n" \
" %f, %f, %f, %f\n" \
")"
#define M4f_Arg(m) \
(m)._11, (m)._12, (m)._13, (m)._14, \
(m)._21, (m)._22, (m)._23, (m)._24, \
(m)._31, (m)._32, (m)._33, (m)._34, \
(m)._41, (m)._42, (m)._43, (m)._44
LADEF V4f v4f(float x, float y, float z, float w);
LADEF V4f v4ff(float x);
LADEF V4f v4f2f(V2f a);
Expand Down Expand Up @@ -594,6 +669,17 @@ LADEF M4f m4f_rot_z(float angle);

#define V4d_Fmt "v4d(%lf, %lf, %lf, %lf)"
#define V4d_Arg(v) (v).x, (v).y, (v).z, (v).w
#define M4d_Fmt "m4d(\n" \
" %lf, %lf, %lf, %lf,\n" \
" %lf, %lf, %lf, %lf,\n" \
" %lf, %lf, %lf, %lf,\n" \
" %lf, %lf, %lf, %lf\n" \
")"
#define M4d_Arg(m) \
(m)._11, (m)._12, (m)._13, (m)._14, \
(m)._21, (m)._22, (m)._23, (m)._24, \
(m)._31, (m)._32, (m)._33, (m)._34, \
(m)._41, (m)._42, (m)._43, (m)._44
LADEF V4d v4d(double x, double y, double z, double w);
LADEF V4d v4dd(double x);
LADEF V4d v4d2f(V2f a);
Expand Down Expand Up @@ -639,6 +725,17 @@ LADEF M4d m4d_rot_z(double angle);

#define V4i_Fmt "v4i(%d, %d, %d, %d)"
#define V4i_Arg(v) (v).x, (v).y, (v).z, (v).w
#define M4i_Fmt "m4i(\n" \
" %d, %d, %d, %d,\n" \
" %d, %d, %d, %d,\n" \
" %d, %d, %d, %d,\n" \
" %d, %d, %d, %d\n" \
")"
#define M4i_Arg(m) \
(m)._11, (m)._12, (m)._13, (m)._14, \
(m)._21, (m)._22, (m)._23, (m)._24, \
(m)._31, (m)._32, (m)._33, (m)._34, \
(m)._41, (m)._42, (m)._43, (m)._44
LADEF V4i v4i(int x, int y, int z, int w);
LADEF V4i v4ii(int x);
LADEF V4i v4i2f(V2f a);
Expand Down Expand Up @@ -672,6 +769,17 @@ LADEF V4i m4i_mul_vec(M4i m, V4i v);

#define V4u_Fmt "v4u(%u, %u, %u, %u)"
#define V4u_Arg(v) (v).x, (v).y, (v).z, (v).w
#define M4u_Fmt "m4u(\n" \
" %u, %u, %u, %u,\n" \
" %u, %u, %u, %u,\n" \
" %u, %u, %u, %u,\n" \
" %u, %u, %u, %u\n" \
")"
#define M4u_Arg(m) \
(m)._11, (m)._12, (m)._13, (m)._14, \
(m)._21, (m)._22, (m)._23, (m)._24, \
(m)._31, (m)._32, (m)._33, (m)._34, \
(m)._41, (m)._42, (m)._43, (m)._44
LADEF V4u v4u(unsigned int x, unsigned int y, unsigned int z, unsigned int w);
LADEF V4u v4uu(unsigned int x);
LADEF V4u v4u2f(V2f a);
Expand Down
37 changes: 37 additions & 0 deletions src/lag.c
Original file line number Diff line number Diff line change
Expand Up @@ -673,6 +673,16 @@ const char *mat_func(size_t rows, size_t cols, Type type, const char *name)
}
}

const char *mat_ctor(size_t rows, size_t cols, Type type)
{
if (rows == cols) {
return temp_sprintf("m%zu%s", rows, type_defs[type].suffix);
} else {
return temp_sprintf("m%zux%zu%s", rows, cols, type_defs[type].suffix);
}
}


void gen_mat_def(FILE *stream, size_t rows, size_t cols, Type type)
{
fgenf(stream, "typedef union {");
Expand All @@ -693,6 +703,32 @@ void gen_mat_def(FILE *stream, size_t rows, size_t cols, Type type)
fgen_line_break(stream);
}

void gen_mat_printf_macros(FILE *stream, size_t rows, size_t cols, Type type)
{
fprintf(stream, "#define %s_Fmt \"%s(\\n\" \\\n", mat_type(rows, cols, type), mat_ctor(rows, cols, type));
for (size_t y = 0; y < rows; ++y) {
fprintf(stream, " \" ");
for (size_t x = 0; x < cols; ++x) {
if (x > 0) fprintf(stream, ", ");
fprintf(stream, "%%%s", type_defs[type].fmt);
}
if (y + 1 < rows) fprintf(stream, ",");
fgenf(stream, "\\n\" \\");
}
fgenf(stream, "\")\"");

fprintf(stream, "#define %s_Arg(m) \\\n", mat_type(rows, cols, type));
for (size_t y = 0; y < rows; ++y) {
fprintf(stream, " ");
for (size_t x = 0; x < cols; ++x) {
if (x > 0) fprintf(stream, ", ");
fprintf(stream, "(m)._%zu%zu", y + 1, x + 1);
}
if (y + 1 < rows) fprintf(stream, ", \\\n");
}
fgen_line_break(stream);
}

void gen_mat_id(FILE *stream, size_t n, Type type, bool impl)
{
gen_sig_begin(stream, mat_type(n, n, type), mat_func(n, n, type, "id"));
Expand Down Expand Up @@ -906,6 +942,7 @@ int main()
for (size_t n = VECTOR_MIN_SIZE; n <= VECTOR_MAX_SIZE; ++n) {
for (Type type = 0; type < COUNT_TYPES; ++type) {
gen_vec_printf_macros(stream, n, type);
gen_mat_printf_macros(stream, n, n, type);
gen_vec_ctor(stream, n, type, false);
gen_scalar_ctor(stream, n, type, false);
for (size_t src_n = VECTOR_MIN_SIZE; src_n <= VECTOR_MAX_SIZE; ++src_n) {
Expand Down