#pragma once #include #include "vector2.h" #include "vector3.h" #include "vector4.h" #include "matrix3.h" #include "matrix4.h" template std::ostream& operator<< (std::ostream& os, const _vector3& vec) { return os<< vec[0] << " " << vec[1] << " " << vec[2]; } template std::istream& operator>> (std::istream& is, _vector3& vec) { return is >> vec[0] >> vec[1] >> vec[2]; } template std::ostream& operator<< (std::ostream& os, const _vector2& vec) { return os<< vec[0] << " " << vec[1]; } template std::istream& operator>> (std::istream& is, _vector2& vec) { return is >> vec[0] >> vec[1]; } template std::ostream& operator<< (std::ostream& os, const _vector4& vec) { return os<< vec[0] << " " << vec[1] << " " << vec[2] << " " << vec[3]; } template std::istream& operator>> (std::istream& is, _vector4& vec) { return is >> vec[0] >> vec[1] >> vec[2] >> vec[3]; } template std::ostream& operator<< (std::ostream& os, const _matrix4& m) { for(int i = 0; i < 4; i++) { os << '\t' << m.row(i) << '\n'; } return os; } template std::ostream& operator<< (std::ostream& os, const _matrix3& m) { for(int i = 0; i < 3; i++) { os << '\t' << m.row(i) << '\n'; } return os; } //TODO: write code for quaternion output //TODO: write code for array_2d output