Skip to content
Snippets Groups Projects
Commit 78a9a7a1 authored by Philip Trettner's avatar Philip Trettner
Browse files

special values as functions

parent d7d28baf
Branches
No related tags found
No related merge requests found
......@@ -141,8 +141,6 @@ struct mat
using row_t = vec<C, ScalarT>;
using col_t = vec<R, ScalarT>;
static const mat id;
col_t m[R];
constexpr col_t& operator[](int i) { return m[i]; }
......@@ -150,6 +148,37 @@ struct mat
constexpr col_t col(int i) const { return m[i]; }
constexpr row_t row(int i) const { return detail::mat_row(*this, i); }
static constexpr mat<C, R, ScalarT> zero() { return {}; }
static constexpr mat<C, R, ScalarT> ones()
{
mat<C, R, ScalarT> m;
for (auto c = 0; c < C; ++c)
for (auto r = 0; r < R; ++r)
m[c][r] = ScalarT(1);
return m;
}
static constexpr mat<C, R, ScalarT> identity()
{
mat<C, R, ScalarT> m;
for (auto i = 0; i < (C < R ? C : R); ++i)
m[i][i] = ScalarT(1);
return m;
}
static constexpr mat<C, R, ScalarT> diag(ScalarT v)
{
mat<C, R, ScalarT> m;
for (auto i = 0; i < (C < R ? C : R); ++i)
m[i][i] = v;
return m;
}
static constexpr mat<C, R, ScalarT> diag(vec<(C < R ? C : R), ScalarT> const& v)
{
mat<C, R, ScalarT> m;
for (auto i = 0; i < (C < R ? C : R); ++i)
m[i][i] = v[i];
return m;
}
};
} // namespace tg
......@@ -64,6 +64,9 @@ struct pos<1, ScalarT>
{
return pos<D, T>(*this);
}
static constexpr pos<1, ScalarT> zero() { return {ScalarT(0)}; }
static constexpr pos<1, ScalarT> ones() { return {ScalarT(1)}; }
};
template <class ScalarT>
......@@ -91,6 +94,9 @@ struct pos<2, ScalarT>
{
return pos<D, T>(*this);
}
static constexpr pos<2, ScalarT> zero() { return {ScalarT(0), ScalarT(0)}; }
static constexpr pos<2, ScalarT> ones() { return {ScalarT(1), ScalarT(1)}; }
};
template <class ScalarT>
......@@ -123,6 +129,9 @@ struct pos<3, ScalarT>
{
return pos<D, T>(*this);
}
static constexpr pos<3, ScalarT> zero() { return {ScalarT(0), ScalarT(0), ScalarT(0)}; }
static constexpr pos<3, ScalarT> ones() { return {ScalarT(1), ScalarT(1), ScalarT(1)}; }
};
template <class ScalarT>
......@@ -160,6 +169,9 @@ struct pos<4, ScalarT>
{
return pos<D, T>(*this);
}
static constexpr pos<4, ScalarT> zero() { return {ScalarT(0), ScalarT(0), ScalarT(0), ScalarT(0)}; }
static constexpr pos<4, ScalarT> ones() { return {ScalarT(1), ScalarT(1), ScalarT(1), ScalarT(1)}; }
};
// comparison operators
......
......@@ -68,6 +68,10 @@ struct size<1, ScalarT>
{
return size<D, T>(*this);
}
static constexpr size<1, ScalarT> zero() { return {ScalarT(0)}; }
static constexpr size<1, ScalarT> ones() { return {ScalarT(1)}; }
static constexpr size<1, ScalarT> unit() { return {ScalarT(1)}; }
};
template <class ScalarT>
......@@ -95,6 +99,10 @@ struct size<2, ScalarT>
{
return size<D, T>(*this);
}
static constexpr size<2, ScalarT> zero() { return {ScalarT(0), ScalarT(0)}; }
static constexpr size<2, ScalarT> ones() { return {ScalarT(1), ScalarT(1)}; }
static constexpr size<2, ScalarT> unit() { return {ScalarT(1), ScalarT(1)}; }
};
template <class ScalarT>
......@@ -123,6 +131,10 @@ struct size<3, ScalarT>
{
return size<D, T>(*this);
}
static constexpr size<3, ScalarT> zero() { return {ScalarT(0), ScalarT(0), ScalarT(0)}; }
static constexpr size<3, ScalarT> ones() { return {ScalarT(1), ScalarT(1), ScalarT(1)}; }
static constexpr size<3, ScalarT> unit() { return {ScalarT(1), ScalarT(1), ScalarT(1)}; }
};
template <class ScalarT>
......@@ -152,6 +164,10 @@ struct size<4, ScalarT>
{
return size<D, T>(*this);
}
static constexpr size<4, ScalarT> zero() { return {ScalarT(0), ScalarT(0), ScalarT(0), ScalarT(0)}; }
static constexpr size<4, ScalarT> ones() { return {ScalarT(1), ScalarT(1), ScalarT(1), ScalarT(1)}; }
static constexpr size<4, ScalarT> unit() { return {ScalarT(1), ScalarT(1), ScalarT(1), ScalarT(1)}; }
};
// comparison operators
......
......@@ -139,6 +139,10 @@ struct vec<1, ScalarT>
{
return vec<D, T>(*this);
}
static constexpr vec<1, ScalarT> zero() { return {ScalarT(0)}; }
static constexpr vec<1, ScalarT> unit_x() { return {ScalarT(1)}; }
static constexpr vec<1, ScalarT> ones() { return {ScalarT(1)}; }
};
template <class ScalarT>
......@@ -166,6 +170,11 @@ struct vec<2, ScalarT>
{
return vec<D, T>(*this);
}
static constexpr vec<2, ScalarT> zero() { return {ScalarT(0), ScalarT(0)}; }
static constexpr vec<2, ScalarT> unit_x() { return {ScalarT(1), ScalarT(0)}; }
static constexpr vec<2, ScalarT> unit_y() { return {ScalarT(0), ScalarT(1)}; }
static constexpr vec<2, ScalarT> ones() { return {ScalarT(1), ScalarT(1)}; }
};
template <class ScalarT>
......@@ -198,6 +207,12 @@ struct vec<3, ScalarT>
{
return vec<D, T>(*this);
}
static constexpr vec<3, ScalarT> zero() { return {ScalarT(0), ScalarT(0), ScalarT(0)}; }
static constexpr vec<3, ScalarT> unit_x() { return {ScalarT(1), ScalarT(0), ScalarT(0)}; }
static constexpr vec<3, ScalarT> unit_y() { return {ScalarT(0), ScalarT(1), ScalarT(0)}; }
static constexpr vec<3, ScalarT> unit_z() { return {ScalarT(0), ScalarT(0), ScalarT(1)}; }
static constexpr vec<3, ScalarT> ones() { return {ScalarT(1), ScalarT(1), ScalarT(1)}; }
};
template <class ScalarT>
......@@ -235,6 +250,13 @@ struct vec<4, ScalarT>
{
return vec<D, T>(*this);
}
static constexpr vec<4, ScalarT> zero() { return {ScalarT(0), ScalarT(0), ScalarT(0), ScalarT(0)}; }
static constexpr vec<4, ScalarT> unit_x() { return {ScalarT(1), ScalarT(0), ScalarT(0), ScalarT(0)}; }
static constexpr vec<4, ScalarT> unit_y() { return {ScalarT(0), ScalarT(1), ScalarT(0), ScalarT(0)}; }
static constexpr vec<4, ScalarT> unit_z() { return {ScalarT(0), ScalarT(0), ScalarT(1), ScalarT(0)}; }
static constexpr vec<4, ScalarT> unit_w() { return {ScalarT(0), ScalarT(0), ScalarT(0), ScalarT(1)}; }
static constexpr vec<4, ScalarT> ones() { return {ScalarT(1), ScalarT(1), ScalarT(1), ScalarT(1)}; }
};
// comparison operators
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment