- Switched from Allman (BSD) to 1TBS (K&R)
Namespaces, Types, and Requires/Concepts still use Allman
This commit is contained in:
@@ -28,7 +28,7 @@ template<typename ScalarT, size_t...IndicesV> struct vector; //
|
||||
template<typename ScalarT, size_t RowsV, size_t...ColIndicesV> struct matrix; // Forward def for matrices
|
||||
|
||||
// Simplified interface for creating sized vectors or matrices
|
||||
template<typename ScalarT, size_t SizeV> using vec
|
||||
template<typename ScalarT, size_t SizeV> using vec
|
||||
= decltype(detail::__gen_vector<vector, ScalarT>(make_index_sequence<SizeV>{})); // Gets the type returned by this function
|
||||
|
||||
template<typename ScalarT, size_t ColsV, size_t RowsV> using mat
|
||||
|
||||
@@ -26,16 +26,14 @@ namespace fennec
|
||||
|
||||
// specialization for mat2
|
||||
template<typename scalar, size_t rows, size_t...cols> requires(rows == 2 && sizeof...(cols) == 2)
|
||||
constexpr scalar determinant(const matrix<scalar, rows, cols...>& m)
|
||||
{
|
||||
constexpr scalar determinant(const matrix<scalar, rows, cols...>& m) {
|
||||
return m[0][0] * m[1][1] - m[1][0] * m[0][1];
|
||||
}
|
||||
|
||||
// specialization for mat3
|
||||
template<typename scalar, size_t rows, size_t...cols> requires(rows == 3 && sizeof...(cols) == 3)
|
||||
constexpr scalar determinant(const matrix<scalar, rows, cols...>& m)
|
||||
{
|
||||
// Cofactor expansion over first column, better for cache locality than the first row
|
||||
constexpr scalar determinant(const matrix<scalar, rows, cols...>& m) {
|
||||
// Cofactor expansion over first column
|
||||
return m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1])
|
||||
- m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0])
|
||||
+ m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]);
|
||||
@@ -43,9 +41,8 @@ constexpr scalar determinant(const matrix<scalar, rows, cols...>& m)
|
||||
|
||||
// specialization for mat4
|
||||
template<typename scalar, size_t rows, size_t...cols> requires(rows == 4 && sizeof...(cols) == 4)
|
||||
constexpr scalar determinant(const matrix<scalar, rows, cols...>& m)
|
||||
{
|
||||
// Cofactor expansion over the first column, better for cache locality than the first row
|
||||
constexpr scalar determinant(const matrix<scalar, rows, cols...>& m) {
|
||||
// Cofactor expansion over the first column
|
||||
scalar d00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
|
||||
scalar d01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
|
||||
scalar d02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
|
||||
@@ -64,8 +61,7 @@ constexpr scalar determinant(const matrix<scalar, rows, cols...>& m)
|
||||
|
||||
// specialization for mat2
|
||||
template<typename scalar, size_t rows, size_t...cols> requires(rows == 2 && sizeof...(cols) == 2)
|
||||
constexpr matrix<scalar, rows, cols...> inverse(const matrix<scalar, rows, cols...>& m)
|
||||
{
|
||||
constexpr matrix<scalar, rows, cols...> inverse(const matrix<scalar, rows, cols...>& m) {
|
||||
scalar di = scalar(1) / fennec::determinant(m);
|
||||
return matrix<scalar, rows, cols...>(
|
||||
m[1][1] * di, -m[0][1] * di, -m[1][0] * di, m[0][0] * di
|
||||
@@ -74,8 +70,7 @@ constexpr matrix<scalar, rows, cols...> inverse(const matrix<scalar, rows, cols.
|
||||
|
||||
// specialization for mat3
|
||||
template<typename scalar, size_t rows, size_t...cols> requires(rows == 3 && sizeof...(cols) == 3)
|
||||
constexpr matrix<scalar, rows, cols...> inverse(const matrix<scalar, rows, cols...>& m)
|
||||
{
|
||||
constexpr matrix<scalar, rows, cols...> inverse(const matrix<scalar, rows, cols...>& m) {
|
||||
scalar di = scalar(1) / fennec::determinant(m);
|
||||
|
||||
matrix<scalar, rows, cols...> i(
|
||||
@@ -96,8 +91,7 @@ constexpr matrix<scalar, rows, cols...> inverse(const matrix<scalar, rows, cols.
|
||||
}
|
||||
|
||||
template<typename scalar, size_t rows, size_t...cols> requires(rows == 4 && sizeof...(cols) == 4)
|
||||
constexpr matrix<scalar, rows, cols...> inverse(const matrix<scalar, rows, cols...>& m)
|
||||
{
|
||||
constexpr matrix<scalar, rows, cols...> inverse(const matrix<scalar, rows, cols...>& m) {
|
||||
scalar s0 = m[0][0] * m[1][1] - m[1][0] * m[0][1];
|
||||
scalar s1 = m[0][0] * m[1][2] - m[1][0] * m[0][2];
|
||||
scalar s2 = m[0][0] * m[1][3] - m[1][0] * m[0][3];
|
||||
|
||||
Reference in New Issue
Block a user