Linting pass

This commit is contained in:
rexy712 2020-08-17 09:57:00 -07:00
parent 38d2ec4466
commit 156b7c3212
9 changed files with 77 additions and 94 deletions

View File

@ -31,6 +31,9 @@ must do's:
comments max 2 lines comments max 2 lines
no void in parameter list: void func(){} no void in parameter list: void func(){}
brace formatting: brace formatting:
namespace thing{
}
void function(void){ void function(void){
} }
@ -91,5 +94,5 @@ no-no's:
struct game_state* gl; //bad boi struct game_state* gl; //bad boi
excess include directives excess include directives
if body on the same line as the if keyword if body on the same line as the if keyword
elso body on the same line as the else keyword else body on the same line as the else keyword
if(thing) do_stuff(); if(thing) do_stuff();

View File

@ -40,11 +40,11 @@ namespace math::detail{
constexpr T determinate_helper<T,R>::perform(const matrix<T,R,R>& m){ constexpr T determinate_helper<T,R>::perform(const matrix<T,R,R>& m){
T sum = 0; T sum = 0;
T op = 1; T op = 1;
for(size_t i = 0;i < R;++i){ for(size_t i = 0; i < R; ++i){
T item = op * m[0][i]; T item = op * m[0][i];
matrix<T,R-1,R-1> mul(no_initialize); matrix<T,R-1,R-1> mul(no_initialize);
for(size_t j = 1, mj = 0;j < R;++j){ for(size_t j = 1, mj = 0; j < R; ++j){
for(size_t k = 0, mk = 0;k < R;++k){ for(size_t k = 0, mk = 0; k < R; ++k){
if(k == i) if(k == i)
continue; continue;
mul[mj][mk] = m[j][k]; mul[mj][mk] = m[j][k];
@ -92,70 +92,55 @@ namespace math::detail{
} }
template<typename T> template<typename T>
constexpr matrix<T,4,4> inverse_helper<T,4>::perform(const matrix<T,4,4>& m){ constexpr matrix<T,4,4> inverse_helper<T,4>::perform(const matrix<T,4,4>& m){
//barely over 50 lines, can be made slightly shorter by making the return statement unreadable
T det = m.determinate(); T det = m.determinate();
if(!det) if(!det)
return matrix<T,4,4>(zero_initialize); return matrix<T,4,4>(zero_initialize);
//Math is power
return matrix<T,4,4>((m.get(5) * ((m.get(10) * m.get(15)) - (m.get(11) * m.get(14))) - return matrix<T,4,4>((m.get(5) * ((m.get(10) * m.get(15)) - (m.get(11) * m.get(14))) -
m.get(6) * ((m.get(9) * m.get(15)) - (m.get(11) * m.get(13))) + m.get(6) * ((m.get(9) * m.get(15)) - (m.get(11) * m.get(13))) +
m.get(7) * ((m.get(9) * m.get(14)) - (m.get(10) * m.get(13)))) / det, m.get(7) * ((m.get(9) * m.get(14)) - (m.get(10) * m.get(13)))) / det,
-(m.get(1) * ((m.get(10) * m.get(15)) - (m.get(11) * m.get(14))) - -(m.get(1) * ((m.get(10) * m.get(15)) - (m.get(11) * m.get(14))) -
m.get(2) * ((m.get(9) * m.get(15)) - (m.get(11) * m.get(13))) + m.get(2) * ((m.get(9) * m.get(15)) - (m.get(11) * m.get(13))) +
m.get(3) * ((m.get(9) * m.get(14)) - (m.get(10) * m.get(13)))) / det, m.get(3) * ((m.get(9) * m.get(14)) - (m.get(10) * m.get(13)))) / det,
(m.get(1) * ((m.get(6) * m.get(15)) - (m.get(7) * m.get(14))) - (m.get(1) * ((m.get(6) * m.get(15)) - (m.get(7) * m.get(14))) -
m.get(2) * ((m.get(5) * m.get(15)) - (m.get(7) * m.get(13))) + m.get(2) * ((m.get(5) * m.get(15)) - (m.get(7) * m.get(13))) +
m.get(3) * ((m.get(5) * m.get(14)) - (m.get(6) * m.get(13)))) / det, m.get(3) * ((m.get(5) * m.get(14)) - (m.get(6) * m.get(13)))) / det,
-(m.get(1) * ((m.get(6) * m.get(11)) - (m.get(7) * m.get(10))) - -(m.get(1) * ((m.get(6) * m.get(11)) - (m.get(7) * m.get(10))) -
m.get(2) * ((m.get(5) * m.get(11)) - (m.get(7) * m.get(9))) + m.get(2) * ((m.get(5) * m.get(11)) - (m.get(7) * m.get(9))) +
m.get(3) * ((m.get(5) * m.get(10)) - (m.get(6) * m.get(9)))) / det, m.get(3) * ((m.get(5) * m.get(10)) - (m.get(6) * m.get(9)))) / det,
-(m.get(4) * ((m.get(10) * m.get(15)) - (m.get(11) * m.get(14))) - -(m.get(4) * ((m.get(10) * m.get(15)) - (m.get(11) * m.get(14))) -
m.get(6) * ((m.get(8) * m.get(15)) - (m.get(11) * m.get(12))) + m.get(6) * ((m.get(8) * m.get(15)) - (m.get(11) * m.get(12))) +
m.get(7) * ((m.get(8) * m.get(14)) - (m.get(10) * m.get(12)))) / det, m.get(7) * ((m.get(8) * m.get(14)) - (m.get(10) * m.get(12)))) / det,
(m.get(0) * ((m.get(10) * m.get(15)) - (m.get(11) * m.get(14))) - (m.get(0) * ((m.get(10) * m.get(15)) - (m.get(11) * m.get(14))) -
m.get(2) * ((m.get(8) * m.get(15)) - (m.get(11) * m.get(12))) + m.get(2) * ((m.get(8) * m.get(15)) - (m.get(11) * m.get(12))) +
m.get(3) * ((m.get(8) * m.get(14)) - (m.get(10) * m.get(12)))) / det, m.get(3) * ((m.get(8) * m.get(14)) - (m.get(10) * m.get(12)))) / det,
-(m.get(0) * ((m.get(6) * m.get(15)) - (m.get(7) * m.get(14))) - -(m.get(0) * ((m.get(6) * m.get(15)) - (m.get(7) * m.get(14))) -
m.get(2) * ((m.get(4) * m.get(15)) - (m.get(7) * m.get(12))) + m.get(2) * ((m.get(4) * m.get(15)) - (m.get(7) * m.get(12))) +
m.get(3) * ((m.get(4) * m.get(14)) - (m.get(6) * m.get(12)))) / det, m.get(3) * ((m.get(4) * m.get(14)) - (m.get(6) * m.get(12)))) / det,
(m.get(0) * ((m.get(6) * m.get(11)) - (m.get(7) * m.get(10))) - (m.get(0) * ((m.get(6) * m.get(11)) - (m.get(7) * m.get(10))) -
m.get(2) * ((m.get(4) * m.get(11)) - (m.get(7) * m.get(8))) + m.get(2) * ((m.get(4) * m.get(11)) - (m.get(7) * m.get(8))) +
m.get(3) * ((m.get(4) * m.get(10)) - (m.get(6) * m.get(8)))) / det, m.get(3) * ((m.get(4) * m.get(10)) - (m.get(6) * m.get(8)))) / det,
(m.get(4) * ((m.get(9) * m.get(15)) - (m.get(11) * m.get(13))) - (m.get(4) * ((m.get(9) * m.get(15)) - (m.get(11) * m.get(13))) -
m.get(5) * ((m.get(8) * m.get(15)) - (m.get(11) * m.get(12))) + m.get(5) * ((m.get(8) * m.get(15)) - (m.get(11) * m.get(12))) +
m.get(7) * ((m.get(8) * m.get(13)) - (m.get(9) * m.get(12)))) / det, m.get(7) * ((m.get(8) * m.get(13)) - (m.get(9) * m.get(12)))) / det,
-(m.get(0) * ((m.get(9) * m.get(15)) - (m.get(11) * m.get(13))) - -(m.get(0) * ((m.get(9) * m.get(15)) - (m.get(11) * m.get(13))) -
m.get(1) * ((m.get(8) * m.get(15)) - (m.get(11) * m.get(12))) + m.get(1) * ((m.get(8) * m.get(15)) - (m.get(11) * m.get(12))) +
m.get(3) * ((m.get(8) * m.get(13)) - (m.get(9) * m.get(12)))) / det, m.get(3) * ((m.get(8) * m.get(13)) - (m.get(9) * m.get(12)))) / det,
(m.get(0) * ((m.get(5) * m.get(15)) - (m.get(7) * m.get(13))) - (m.get(0) * ((m.get(5) * m.get(15)) - (m.get(7) * m.get(13))) -
m.get(1) * ((m.get(4) * m.get(15)) - (m.get(7) * m.get(12))) + m.get(1) * ((m.get(4) * m.get(15)) - (m.get(7) * m.get(12))) +
m.get(3) * ((m.get(4) * m.get(13)) - (m.get(5) * m.get(12)))) / det, m.get(3) * ((m.get(4) * m.get(13)) - (m.get(5) * m.get(12)))) / det,
-(m.get(0) * ((m.get(5) * m.get(11)) - (m.get(7) * m.get(9))) - -(m.get(0) * ((m.get(5) * m.get(11)) - (m.get(7) * m.get(9))) -
m.get(1) * ((m.get(4) * m.get(11)) - (m.get(7) * m.get(8))) + m.get(1) * ((m.get(4) * m.get(11)) - (m.get(7) * m.get(8))) +
m.get(3) * ((m.get(4) * m.get(9)) - (m.get(5) * m.get(8)))) / det, m.get(3) * ((m.get(4) * m.get(9)) - (m.get(5) * m.get(8)))) / det,
-(m.get(4) * ((m.get(9) * m.get(14)) - (m.get(10) * m.get(13))) - -(m.get(4) * ((m.get(9) * m.get(14)) - (m.get(10) * m.get(13))) -
m.get(5) * ((m.get(8) * m.get(14)) - (m.get(10) * m.get(12))) + m.get(5) * ((m.get(8) * m.get(14)) - (m.get(10) * m.get(12))) +
m.get(6) * ((m.get(8) * m.get(13)) - (m.get(9) * m.get(12)))) / det, m.get(6) * ((m.get(8) * m.get(13)) - (m.get(9) * m.get(12)))) / det,
(m.get(0) * ((m.get(9) * m.get(14)) - (m.get(10) * m.get(13))) - (m.get(0) * ((m.get(9) * m.get(14)) - (m.get(10) * m.get(13))) -
m.get(1) * ((m.get(8) * m.get(14)) - (m.get(10) * m.get(12))) + m.get(1) * ((m.get(8) * m.get(14)) - (m.get(10) * m.get(12))) +
m.get(2) * ((m.get(8) * m.get(13)) - (m.get(9) * m.get(12)))) / det, m.get(2) * ((m.get(8) * m.get(13)) - (m.get(9) * m.get(12)))) / det,
-(m.get(0) * ((m.get(5) * m.get(14)) - (m.get(6) * m.get(13))) - -(m.get(0) * ((m.get(5) * m.get(14)) - (m.get(6) * m.get(13))) -
m.get(1) * ((m.get(4) * m.get(14)) - (m.get(6) * m.get(12))) + m.get(1) * ((m.get(4) * m.get(14)) - (m.get(6) * m.get(12))) +
m.get(2) * ((m.get(4) * m.get(13)) - (m.get(5) * m.get(12)))) / det, m.get(2) * ((m.get(4) * m.get(13)) - (m.get(5) * m.get(12)))) / det,
(m.get(0) * ((m.get(5) * m.get(10)) - (m.get(6) * m.get(9))) - (m.get(0) * ((m.get(5) * m.get(10)) - (m.get(6) * m.get(9))) -
m.get(1) * ((m.get(4) * m.get(10)) - (m.get(6) * m.get(8))) + m.get(1) * ((m.get(4) * m.get(10)) - (m.get(6) * m.get(8))) +
m.get(2) * ((m.get(4) * m.get(9)) - (m.get(5) * m.get(8)))) / det); m.get(2) * ((m.get(4) * m.get(9)) - (m.get(5) * m.get(8)))) / det);

View File

@ -90,7 +90,6 @@ namespace math{
constexpr const_pointer raw()const; constexpr const_pointer raw()const;
constexpr operator pointer(); constexpr operator pointer();
constexpr operator const_pointer()const; constexpr operator const_pointer()const;
}; };
template<typename T, size_t R, size_t C> template<typename T, size_t R, size_t C>

View File

@ -44,7 +44,7 @@ namespace math{
template<typename T, size_t R, size_t C> template<typename T, size_t R, size_t C>
constexpr matrix_base<T,R,C>::matrix_base(value_type v){ constexpr matrix_base<T,R,C>::matrix_base(value_type v){
for(size_type i = 0;i < Columns*Rows;++i) for(size_type i = 0; i < Columns*Rows; ++i)
m_data[i] = v; m_data[i] = v;
} }
template<typename T, size_t R, size_t C> template<typename T, size_t R, size_t C>
@ -56,7 +56,7 @@ namespace math{
template<typename U> template<typename U>
constexpr matrix_base<T,R,C>::matrix_base(const matrix_base<U,Columns,Rows>& m){ constexpr matrix_base<T,R,C>::matrix_base(const matrix_base<U,Columns,Rows>& m){
using mat = decltype(m); using mat = decltype(m);
for(typename mat::size_type i = 0;i < mat::Columns*mat::Rows;++i) for(typename mat::size_type i = 0; i < mat::Columns*mat::Rows; ++i)
m_data[i] = m.get(i); m_data[i] = m.get(i);
} }
@ -64,7 +64,7 @@ namespace math{
template<typename U> template<typename U>
constexpr matrix_base<T,R,C>& matrix_base<T,R,C>::operator=(const matrix_base<U,Columns,Rows>& m){ constexpr matrix_base<T,R,C>& matrix_base<T,R,C>::operator=(const matrix_base<U,Columns,Rows>& m){
using mat = decltype(m); using mat = decltype(m);
for(typename mat::size_type i = 0;i < mat::Columns*mat::Rows;++i) for(typename mat::size_type i = 0; i < mat::Columns*mat::Rows; ++i)
m_data[i] = m.get(i); m_data[i] = m.get(i);
return *this; return *this;
} }
@ -149,15 +149,15 @@ namespace math{
template<typename T, size_t R> template<typename T, size_t R>
constexpr auto matrix<T,R,R>::trace()const -> value_type{ constexpr auto matrix<T,R,R>::trace()const -> value_type{
value_type sum = 0; value_type sum = 0;
for(size_type i = 0;i < R;++i){ for(size_type i = 0; i < R; ++i){
sum += get(i, i); sum += get(i, i);
} }
} }
template<typename T, size_t R> template<typename T, size_t R>
constexpr matrix<T,R,R> matrix<T,R,R>::transpose()const{ constexpr matrix<T,R,R> matrix<T,R,R>::transpose()const{
matrix m(no_initialize); matrix m(no_initialize);
for(size_type i = 0;i < R;++i){ for(size_type i = 0; i < R; ++i){
for(size_type j = 0;j < R;++j){ for(size_type j = 0; j < R; ++j){
m.get(j, i) = get(i, j); m.get(j, i) = get(i, j);
} }
} }
@ -264,7 +264,7 @@ namespace math{
template<typename T, typename U, size_t R, size_t C> template<typename T, typename U, size_t R, size_t C>
constexpr bool operator==(const matrix_base<T,R,C>& left, const matrix_base<U,R,C> right){ constexpr bool operator==(const matrix_base<T,R,C>& left, const matrix_base<U,R,C> right){
for(size_t i = 0;i < left.size();++i){ for(size_t i = 0; i < left.size(); ++i){
if(left.get(i) != right.get(i)) if(left.get(i) != right.get(i))
return false; return false;
} }
@ -280,9 +280,9 @@ namespace math{
using res_t = decltype(std::declval<T>() * std::declval<U>()); using res_t = decltype(std::declval<T>() * std::declval<U>());
matrix<res_t,R1,C2> res(zero_initialize); matrix<res_t,R1,C2> res(zero_initialize);
size_t index = 0; size_t index = 0;
for(size_t i = 0;i < left.rows();++i){ for(size_t i = 0; i < left.rows(); ++i){
for(size_t j = 0;j < right.columns();++j){ for(size_t j = 0; j < right.columns(); ++j){
for(size_t k = 0;k < right.rows();++k){ for(size_t k = 0; k < right.rows(); ++k){
res.get(index) += left[i][k] * right[k][j]; res.get(index) += left[i][k] * right[k][j];
} }
++index; ++index;
@ -293,7 +293,7 @@ namespace math{
constexpr auto operator*(const matrix<T,R,C>& left, U&& right){ constexpr auto operator*(const matrix<T,R,C>& left, U&& right){
using res_t = decltype(std::declval<T>() * std::declval<U>()); using res_t = decltype(std::declval<T>() * std::declval<U>());
matrix<res_t,R,C> res(no_initialize); matrix<res_t,R,C> res(no_initialize);
for(size_t i = 0;i < left.size();++i){ for(size_t i = 0; i < left.size(); ++i){
res.get(i) = left.get(i) * std::forward<U>(right); res.get(i) = left.get(i) * std::forward<U>(right);
} }
return res; return res;
@ -302,7 +302,7 @@ namespace math{
constexpr auto operator*(U&& left, const matrix<T,R,C>& right){ constexpr auto operator*(U&& left, const matrix<T,R,C>& right){
using res_t = decltype(std::declval<T>() * std::declval<U>()); using res_t = decltype(std::declval<T>() * std::declval<U>());
matrix<res_t,R,C> res(no_initialize); matrix<res_t,R,C> res(no_initialize);
for(size_t i = 0;i < right.size();++i){ for(size_t i = 0; i < right.size(); ++i){
res.get(i) = std::forward<U>(left) * right.get(i); res.get(i) = std::forward<U>(left) * right.get(i);
} }
return res; return res;
@ -311,7 +311,7 @@ namespace math{
constexpr auto operator/(const matrix<T,R,C>& left, U&& right){ constexpr auto operator/(const matrix<T,R,C>& left, U&& right){
using res_t = decltype(std::declval<T>() / std::declval<U>()); using res_t = decltype(std::declval<T>() / std::declval<U>());
matrix<res_t,R,C> res(no_initialize); matrix<res_t,R,C> res(no_initialize);
for(size_t i = 0;i < left.size();++i){ for(size_t i = 0; i < left.size(); ++i){
res.get(i) = left.get(i) / std::forward<U>(right); res.get(i) = left.get(i) / std::forward<U>(right);
} }
return res; return res;
@ -320,7 +320,7 @@ namespace math{
constexpr auto operator+(const matrix<T,R,C>& left, const matrix<U,R,C>& right){ constexpr auto operator+(const matrix<T,R,C>& left, const matrix<U,R,C>& right){
using res_t = decltype(std::declval<T>() + std::declval<U>()); using res_t = decltype(std::declval<T>() + std::declval<U>());
matrix<res_t,R,C> res(no_initialize); matrix<res_t,R,C> res(no_initialize);
for(size_t i = 0;i < left.size();++i){ for(size_t i = 0; i < left.size(); ++i){
res.get(i) = left.get(i) + right.get(i); res.get(i) = left.get(i) + right.get(i);
} }
return res; return res;
@ -329,7 +329,7 @@ namespace math{
constexpr auto operator-(const matrix<T,R,C>& left, const matrix<U,R,C>& right){ constexpr auto operator-(const matrix<T,R,C>& left, const matrix<U,R,C>& right){
using res_t = decltype(std::declval<T>() - std::declval<U>()); using res_t = decltype(std::declval<T>() - std::declval<U>());
matrix<res_t,R,C> res(no_initialize); matrix<res_t,R,C> res(no_initialize);
for(size_t i = 0;i < left.size();++i){ for(size_t i = 0; i < left.size(); ++i){
res.get(i) = left.get(i) - right.get(i); res.get(i) = left.get(i) - right.get(i);
} }
return res; return res;
@ -338,7 +338,7 @@ namespace math{
constexpr auto operator-(const matrix<T,R,C>& left){ constexpr auto operator-(const matrix<T,R,C>& left){
using res_t = decltype(-std::declval<U>()); using res_t = decltype(-std::declval<U>());
matrix<res_t,R,C> res(no_initialize); matrix<res_t,R,C> res(no_initialize);
for(size_t i = 0;i < left.size();++i){ for(size_t i = 0; i < left.size(); ++i){
res.get(i) = -left.get(i); res.get(i) = -left.get(i);
} }
return res; return res;
@ -353,28 +353,28 @@ namespace math{
} }
template<typename T, typename U, size_t C, size_t R, std::enable_if_t<!is_matrix<U>::value,int>> template<typename T, typename U, size_t C, size_t R, std::enable_if_t<!is_matrix<U>::value,int>>
constexpr decltype(auto) operator*=(matrix<T,R,C>& left, U&& right){ constexpr decltype(auto) operator*=(matrix<T,R,C>& left, U&& right){
for(size_t i = 0;i < left.size();++i){ for(size_t i = 0; i < left.size(); ++i){
left.get(i) = left.get(i) * std::forward<U>(right); left.get(i) = left.get(i) * std::forward<U>(right);
} }
return left; return left;
} }
template<typename T, typename U, size_t C, size_t R, std::enable_if_t<!is_matrix<U>::value,int>> template<typename T, typename U, size_t C, size_t R, std::enable_if_t<!is_matrix<U>::value,int>>
constexpr decltype(auto) operator/=(matrix<T,R,C>& left, U&& right){ constexpr decltype(auto) operator/=(matrix<T,R,C>& left, U&& right){
for(size_t i = 0;i < left.size();++i){ for(size_t i = 0; i < left.size(); ++i){
left.get(i) = left.get(i) / std::forward<U>(right); left.get(i) = left.get(i) / std::forward<U>(right);
} }
return left; return left;
} }
template<typename T, typename U, size_t C, size_t R> template<typename T, typename U, size_t C, size_t R>
constexpr decltype(auto) operator+=(matrix<T,R,C>& left, const matrix<U,R,C>& right){ constexpr decltype(auto) operator+=(matrix<T,R,C>& left, const matrix<U,R,C>& right){
for(size_t i = 0;i < left.size();++i){ for(size_t i = 0; i < left.size(); ++i){
left.get(i) = left.get(i) + right.get(i); left.get(i) = left.get(i) + right.get(i);
} }
return left; return left;
} }
template<typename T, typename U, size_t C, size_t R> template<typename T, typename U, size_t C, size_t R>
constexpr decltype(auto) operator-=(matrix<T,R,C>& left, const matrix<U,R,C>& right){ constexpr decltype(auto) operator-=(matrix<T,R,C>& left, const matrix<U,R,C>& right){
for(size_t i = 0;i < left.size();++i){ for(size_t i = 0; i < left.size(); ++i){
left.get(i) = left.get(i) - right.get(i); left.get(i) = left.get(i) - right.get(i);
} }
return left; return left;

View File

@ -22,10 +22,10 @@
namespace math{ namespace math{
namespace detail{ namespace detail{
struct zero_initialize_t{}; struct zero_initialize_t {};
struct no_initialize_t{}; struct no_initialize_t {};
struct id_initialize_t{}; struct id_initialize_t {};
struct manual_initialize_t{}; struct manual_initialize_t {};
} }
static inline constexpr detail::zero_initialize_t zero_initialize; static inline constexpr detail::zero_initialize_t zero_initialize;

View File

@ -87,8 +87,8 @@ namespace math{
vector<res_t,R> res(zero_initialize); vector<res_t,R> res(zero_initialize);
size_t index = 0; size_t index = 0;
//columns == rows //columns == rows
for(size_t i = 0;i < R;++i){ for(size_t i = 0; i < R; ++i){
for(size_t k = 0;k < C;++k){ for(size_t k = 0; k < C; ++k){
res.get(index) += left[i][k] * right[k]; res.get(index) += left[i][k] * right[k];
} }
++index; ++index;
@ -99,7 +99,7 @@ namespace math{
constexpr auto operator*(const vector<T,R>& left, const vector<U,R>& right){ constexpr auto operator*(const vector<T,R>& left, const vector<U,R>& right){
using res_t = decltype(std::declval<T>() * std::declval<U>()); using res_t = decltype(std::declval<T>() * std::declval<U>());
res_t res = 0; res_t res = 0;
for(size_t i = 0;i < R;++i){ for(size_t i = 0; i < R; ++i){
res += left[i] * right[i]; res += left[i] * right[i];
} }
return res; return res;
@ -108,7 +108,7 @@ namespace math{
constexpr auto operator*(const vector<T,R>& left, U&& right){ constexpr auto operator*(const vector<T,R>& left, U&& right){
using res_t = decltype(std::declval<T>() * std::declval<U>()); using res_t = decltype(std::declval<T>() * std::declval<U>());
vector<res_t,R> res(zero_initialize); vector<res_t,R> res(zero_initialize);
for(size_t i = 0;i < R;++i){ for(size_t i = 0; i < R; ++i){
res[i] = left[i] * std::forward<U>(right); res[i] = left[i] * std::forward<U>(right);
} }
return res; return res;
@ -117,7 +117,7 @@ namespace math{
constexpr auto operator*(U&& left, const vector<T,R>& right){ constexpr auto operator*(U&& left, const vector<T,R>& right){
using res_t = decltype(std::declval<U>() * std::declval<T>()); using res_t = decltype(std::declval<U>() * std::declval<T>());
vector<res_t,R> res(zero_initialize); vector<res_t,R> res(zero_initialize);
for(size_t i = 0;i < R;++i){ for(size_t i = 0; i < R; ++i){
res[i] = std::forward<U>(right) * left[i]; res[i] = std::forward<U>(right) * left[i];
} }
return res; return res;
@ -126,7 +126,7 @@ namespace math{
constexpr auto operator/(const vector<T,R>& left, U&& right){ constexpr auto operator/(const vector<T,R>& left, U&& right){
using res_t = decltype(std::declval<T>() / std::declval<U>()); using res_t = decltype(std::declval<T>() / std::declval<U>());
vector<res_t,R> res(zero_initialize); vector<res_t,R> res(zero_initialize);
for(size_t i = 0;i < R;++i){ for(size_t i = 0; i < R; ++i){
res[i] = left[i] / std::forward<U>(right); res[i] = left[i] / std::forward<U>(right);
} }
return res; return res;
@ -135,7 +135,7 @@ namespace math{
constexpr auto operator+(const vector<T,R>& left, const vector<U,R>& right){ constexpr auto operator+(const vector<T,R>& left, const vector<U,R>& right){
using res_t = decltype(std::declval<T>() + std::declval<U>()); using res_t = decltype(std::declval<T>() + std::declval<U>());
vector<res_t,R> res(zero_initialize); vector<res_t,R> res(zero_initialize);
for(size_t i = 0;i < R;++i){ for(size_t i = 0; i < R; ++i){
res[i] = left[i] + right[i]; res[i] = left[i] + right[i];
} }
return res; return res;
@ -144,7 +144,7 @@ namespace math{
constexpr auto operator-(const vector<T,R>& left, const vector<U,R>& right){ constexpr auto operator-(const vector<T,R>& left, const vector<U,R>& right){
using res_t = decltype(std::declval<T>() - std::declval<U>()); using res_t = decltype(std::declval<T>() - std::declval<U>());
vector<res_t,R> res(zero_initialize); vector<res_t,R> res(zero_initialize);
for(size_t i = 0;i < R;++i){ for(size_t i = 0; i < R; ++i){
res[i] = left[i] - right[i]; res[i] = left[i] - right[i];
} }
return res; return res;
@ -153,7 +153,7 @@ namespace math{
constexpr auto operator-(const vector<T,R>& left){ constexpr auto operator-(const vector<T,R>& left){
using res_t = decltype(-std::declval<U>()); using res_t = decltype(-std::declval<U>());
vector<res_t,R> res(zero_initialize); vector<res_t,R> res(zero_initialize);
for(size_t i = 0;i < R;++i){ for(size_t i = 0; i < R; ++i){
res[i] = -left[i]; res[i] = -left[i];
} }
return res; return res;
@ -161,28 +161,28 @@ namespace math{
template<typename T, typename U, size_t R, std::enable_if_t<!is_matrix<U>::value,int>> template<typename T, typename U, size_t R, std::enable_if_t<!is_matrix<U>::value,int>>
constexpr decltype(auto) operator*=(vector<T,R>& left, U&& right){ constexpr decltype(auto) operator*=(vector<T,R>& left, U&& right){
for(size_t i = 0;i < R;++i){ for(size_t i = 0; i < R; ++i){
left[i] *= right; left[i] *= right;
} }
return left; return left;
} }
template<typename T, typename U, size_t R, std::enable_if_t<!is_matrix<U>::value,int>> template<typename T, typename U, size_t R, std::enable_if_t<!is_matrix<U>::value,int>>
constexpr decltype(auto) operator/=(vector<T,R>& left, U&& right){ constexpr decltype(auto) operator/=(vector<T,R>& left, U&& right){
for(size_t i = 0;i < R;++i){ for(size_t i = 0; i < R; ++i){
left[i] /= right; left[i] /= right;
} }
return left; return left;
} }
template<typename T, typename U, size_t R> template<typename T, typename U, size_t R>
constexpr decltype(auto) operator+=(vector<T,R>& left, const vector<U,R>& right){ constexpr decltype(auto) operator+=(vector<T,R>& left, const vector<U,R>& right){
for(size_t i = 0;i < R;++i){ for(size_t i = 0; i < R; ++i){
left[i] += right[i]; left[i] += right[i];
} }
return left; return left;
} }
template<typename T, typename U, size_t R> template<typename T, typename U, size_t R>
constexpr decltype(auto) operator-=(vector<T,R>& left, const vector<U,R>& right){ constexpr decltype(auto) operator-=(vector<T,R>& left, const vector<U,R>& right){
for(size_t i = 0;i < R;++i){ for(size_t i = 0; i < R; ++i){
left[i] -= right[i]; left[i] -= right[i];
} }
return left; return left;

View File

@ -4,7 +4,7 @@
#include <stdint.h> #include <stdint.h>
#include <GLFW/glfw3.h> #include <GLFW/glfw3.h>
#define OPENFL_VERSION 400 #define OPENGL_VERSION 400
#define GLSL_VERSION 400 #define GLSL_VERSION 400
class GLFWwindow; class GLFWwindow;
@ -19,18 +19,18 @@ private:
GLFWwindow* m_main_window; GLFWwindow* m_main_window;
public: public:
enum RENDERER_ERROR{ enum renderer_error{
RENDERER_OK, RENDERER_OK,
RENDERER_CONTEXT_ERROR, RENDERER_CONTEXT_ERROR,
RENDERER_WINDOW_ERROR, RENDERER_WINDOW_ERROR,
RENDERER_INIT_ERROR, RENDERER_INIT_ERROR,
}; };
render_manager (const render_manager&) = delete; render_manager(const render_manager&) = delete;
render_manager (render_manager&&) = delete; render_manager(render_manager&&) = delete;
render_manager(); render_manager();
RENDERER_ERROR init(int width, int height, const char* title); // Sets up the OpenGL environment renderer_error init(int width, int height, const char* title); // Sets up the OpenGL environment
void update(); // Update the GL context and draw new frame void update(); // Update the GL context and draw new frame
void request_exit(); void request_exit();

View File

@ -14,25 +14,24 @@
#define TILE_COUNT 9 #define TILE_COUNT 9
namespace namespace{
{
bool running = true; bool running = true;
render_manager manager; render_manager manager;
} }
int get_player_input(){ int get_player_input(){
//TODO get player input //TODO get player input
return rand()%9; return rand() % 9;
} }
int check_win_condition(const game_state& gs, char player){ int check_win_condition(const game_state& gs, char player){
int i; int i;
for( i = 0 ; i < 3 ; i++){ for(i = 0 ; i < 3; i++){
//rows //rows
if(gs.board[(i*3)]==player && gs.board[(i*3)+1]==player && gs.board[(i*3)+2]==player) if(gs.board[(i*3)] == player && gs.board[(i*3)+1] == player && gs.board[(i*3)+2] == player)
return 1; return 1;
//column //column
if(gs.board[i]==player && gs.board[i+3]==player && gs.board[i+6]==player) if(gs.board[i] == player && gs.board[i+3] == player && gs.board[i+6] == player)
return 1; return 1;
} }
if(gs.board[0] == player && gs.board[4] == player && gs.board[8] == player) if(gs.board[0] == player && gs.board[4] == player && gs.board[8] == player)
@ -46,7 +45,7 @@ int check_win_condition(const game_state& gs, char player){
void display_game_state(const game_state& gs){ void display_game_state(const game_state& gs){
printf("turn %i:\n", gs.turn); printf("turn %i:\n", gs.turn);
for(int i = 0; i < 3; i++){ for(int i = 0; i < 3; i++){
for(int j = 0; j < 3 ; j++){ for(int j = 0; j < 3; j++){
if(gs.board[(i*3)+j]) if(gs.board[(i*3)+j])
printf("%c", gs.board[(i*3)+j]); printf("%c", gs.board[(i*3)+j]);
else else
@ -73,13 +72,13 @@ void game_turn(game_state& gs,int player_input){
display_game_state(gs); display_game_state(gs);
if(gs.turn == -1) if(gs.turn == -1)
return; return;
player_turn(gs, 'X', rand()%TILE_COUNT); player_turn(gs, 'X', rand() % TILE_COUNT);
display_game_state(gs); display_game_state(gs);
} }
int exists_empty_tile(const game_state& gs){ int exists_empty_tile(const game_state& gs){
int i; int i;
for( i = 0; i < TILE_COUNT ; i++) for(i = 0; i < TILE_COUNT; i++)
if(!gs.board[i]) if(!gs.board[i])
return 1; return 1;
return 0; return 0;
@ -90,15 +89,14 @@ void play_audio(){
} }
void handle_window_close(){ void handle_window_close(){
printf ("[II] Window close event triggered\n"); printf("[II] Window close event triggered\n");
running = false; running = false;
} }
void handle_input_events(GLFWwindow*, int key, int, int, int) void handle_input_events(GLFWwindow*, int key, int, int, int){
{ printf("[II] Recieved keycode %d\n", key);
printf ("[II] Recieved keycode %d\n", key); if(key == 256)
if (key == 256) manager.request_exit();
manager.request_exit ();
} }
int main(){ int main(){
@ -108,9 +106,9 @@ int main(){
play_audio(); play_audio();
manager.init(640, 480, "Tic-Tac-Gugh"); manager.init(640, 480, "Tic-Tac-Gugh");
manager.handle_window_close_event(handle_window_close); manager.handle_window_close_event(handle_window_close);
manager.handle_keypress_event (handle_input_events); manager.handle_keypress_event(handle_input_events);
while (running) while(running)
manager.update(); manager.update();
while(exists_empty_tile(gs) && gs.turn != -1){ while(exists_empty_tile(gs) && gs.turn != -1){

View File

@ -1,9 +1,8 @@
#include <gl3w/GL/gl3w.h> // Must be included first #include <gl3w/GL/gl3w.h> // Must be included first
#include "render.hpp" #include "render.hpp"
#include <stdio.h> #include <cstdio>
namespace namespace{
{
void handle_resize_event(GLFWwindow*, int width, int height){ void handle_resize_event(GLFWwindow*, int width, int height){
printf("Window resized\n"); printf("Window resized\n");
glViewport(0, 0, width, height); glViewport(0, 0, width, height);
@ -12,12 +11,12 @@ namespace
render_manager::render_manager() : render_manager::render_manager() :
m_window_close_callback (nullptr), m_window_close_callback(nullptr),
m_input_handler (nullptr), m_input_handler(nullptr),
m_main_window (nullptr){} m_main_window(nullptr){}
render_manager::RENDERER_ERROR render_manager::init (int width, int height, const char* title){ render_manager::renderer_error render_manager::init (int width, int height, const char* title){
if (!glfwInit()) { if(!glfwInit()){
fprintf(stderr, "[EE] failed to initialize GLFW.\n"); fprintf(stderr, "[EE] failed to initialize GLFW.\n");
return RENDERER_INIT_ERROR; return RENDERER_INIT_ERROR;
} }
@ -27,13 +26,13 @@ render_manager::RENDERER_ERROR render_manager::init (int width, int height, cons
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
m_main_window = glfwCreateWindow(width, height, title, nullptr, nullptr); m_main_window = glfwCreateWindow(width, height, title, nullptr, nullptr);
if (!m_main_window) { if(!m_main_window){
fprintf (stderr, "[EE] Could not create window\n"); fprintf(stderr, "[EE] Could not create window\n");
return RENDERER_WINDOW_ERROR; return RENDERER_WINDOW_ERROR;
} }
glfwMakeContextCurrent(m_main_window); glfwMakeContextCurrent(m_main_window);
if (gl3wInit()) { if(gl3wInit()){
fprintf(stderr, "[EE] failed to initialize OpenGL\n"); fprintf(stderr, "[EE] failed to initialize OpenGL\n");
return RENDERER_CONTEXT_ERROR; return RENDERER_CONTEXT_ERROR;
} }
@ -52,9 +51,8 @@ void render_manager::update(){
glfwPollEvents(); glfwPollEvents();
} }
void render_manager::request_exit() void render_manager::request_exit(){
{
if (m_window_close_callback) if (m_window_close_callback)
m_window_close_callback(); m_window_close_callback();
glfwSetWindowShouldClose(m_main_window, true); glfwSetWindowShouldClose(m_main_window, GLFW_TRUE);
} }