xstream.hpp
00001 #ifndef GLM_EXT_VIRTREV_XSTREAM_HPP
00002 #define GLM_EXT_VIRTREV_XSTREAM_HPP
00003 
00005 // OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
00006 // Virtrev SDK copyright matrem (matrem84.free.fr)
00008 // Created : 2008-05-24
00009 // Updated : 2008-05-26
00010 // Licence : This source is under MIT License
00011 // File    : glm/ext/virtrev/xstream.hpp
00013 // Dependency:
00014 // - GLM core
00015 // - GLM_GTX_matrix_selection
00017 
00018 #include "../glm.hpp"
00019 #include "../gtc/matrix_access.hpp"
00020 #include <iostream>
00021 
00022 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
00023 #       pragma message("GLM: GLM_VIRTREV_xstream extension included")
00024 #endif
00025 
00026 namespace glm
00027 {
00028         namespace virtrev_glmext
00029         {
00031                 namespace xstream
00032                 {
00033                         template<typename T>
00034                         std::ostream & operator << (std::ostream & stream, glm::detail::tvec2<T> const & vec)
00035                         {
00036                                 stream << "<glm_vec2 ";
00037                                 stream << "x=\"" << vec.x << "\" ";
00038                                 stream << "y=\"" << vec.y << "\" ";
00039                                 stream << "/>";
00040 
00041                                 return stream;
00042                         }
00043 
00044                         template<typename T>
00045                         std::ostream & operator << (std::ostream & stream, glm::detail::tvec3<T> const & vec)
00046                         {
00047                                 stream << "<glm_vec3 ";
00048                                 stream << "x=\"" << vec.x << "\" ";
00049                                 stream << "y=\"" << vec.y << "\" ";
00050                                 stream << "z=\"" << vec.z << "\" ";
00051                                 stream << "/>";
00052 
00053                                 return stream;
00054                         }
00055 
00056                         template<typename T>
00057                         std::ostream & operator << (std::ostream & stream, glm::detail::tvec4<T> const & vec)
00058                         {
00059                                 stream << "<glm_vec4 ";
00060                                 stream << "x=\"" << vec.x << "\" ";
00061                                 stream << "y=\"" << vec.y << "\" ";
00062                                 stream << "z=\"" << vec.z << "\" ";
00063                                 stream << "w=\"" << vec.w << "\" ";
00064                                 stream << "/>";
00065 
00066                                 return stream;
00067                         }
00068 
00069                         template<typename T>
00070                         std::ostream & operator << (std::ostream & stream, glm::detail::tmat2x2<T> const & mat)
00071                         {
00072                                 stream << "<glm_mat2>" << std::endl;
00073                                 stream << "<row ";
00074                                 stream << "x=\"" << glm::row(mat, 0)[0] << "\" ";
00075                                 stream << "y=\"" << glm::row(mat, 0)[1] << "\" ";
00076                                 stream << "/>" << std::endl;
00077                                 stream << "<row ";
00078                                 stream << "x=\"" << glm::row(mat, 1)[0] << "\" ";
00079                                 stream << "y=\"" << glm::row(mat, 1)[1] << "\" ";
00080                                 stream << "/>" << std::endl;
00081                                 stream << "</glm_mat2>";
00082 
00083                                 return stream;
00084                         }
00085 
00086                         template<typename T>
00087                         std::ostream & operator << (std::ostream & stream, glm::detail::tmat3x3<T> const & mat)
00088                         {
00089                                 stream << "<glm_mat3>" << std::endl;
00090                                 stream << "<row ";
00091                                 stream << "x=\"" << glm::row(mat, 0)[0] << "\" ";
00092                                 stream << "y=\"" << glm::row(mat, 0)[1] << "\" ";
00093                                 stream << "z=\"" << glm::row(mat, 0)[2] << "\" ";
00094                                 stream << "/>" << std::endl;
00095                                 stream << "<row ";
00096                                 stream << "x=\"" << glm::row(mat, 1)[0] << "\" ";
00097                                 stream << "y=\"" << glm::row(mat, 1)[1] << "\" ";
00098                                 stream << "z=\"" << glm::row(mat, 1)[2] << "\" ";
00099                                 stream << "/>" << std::endl;
00100                                 stream << "<row ";
00101                                 stream << "x=\"" << glm::row(mat, 2)[0] << "\" ";
00102                                 stream << "y=\"" << glm::row(mat, 2)[1] << "\" ";
00103                                 stream << "z=\"" << glm::row(mat, 2)[2] << "\" ";
00104                                 stream << "/>" << std::endl;
00105                                 stream << "</glm_mat3>";
00106 
00107                                 return stream;
00108                         }
00109 
00110                         template<typename T>
00111                         std::ostream & operator << (std::ostream & stream, glm::detail::tmat4x4<T> const & mat)
00112                         {
00113                                 stream << "<glm_mat4>" << std::endl;
00114                                 stream << "<row ";
00115                                 stream << "x=\"" << glm::row(mat, 0)[0] << "\" ";
00116                                 stream << "y=\"" << glm::row(mat, 0)[1] << "\" ";
00117                                 stream << "z=\"" << glm::row(mat, 0)[2] << "\" ";
00118                                 stream << "w=\"" << glm::row(mat, 0)[3] << "\" ";
00119                                 stream << "/>" << std::endl;
00120                                 stream << "<row ";
00121                                 stream << "x=\"" << glm::row(mat, 1)[0] << "\" ";
00122                                 stream << "y=\"" << glm::row(mat, 1)[1] << "\" ";
00123                                 stream << "z=\"" << glm::row(mat, 1)[2] << "\" ";
00124                                 stream << "w=\"" << glm::row(mat, 1)[3] << "\" ";
00125                                 stream << "/>" << std::endl;
00126                                 stream << "<row ";
00127                                 stream << "x=\"" << glm::row(mat, 2)[0] << "\" ";
00128                                 stream << "y=\"" << glm::row(mat, 2)[1] << "\" ";
00129                                 stream << "z=\"" << glm::row(mat, 2)[2] << "\" ";
00130                                 stream << "w=\"" << glm::row(mat, 2)[3] << "\" ";
00131                                 stream << "/>" << std::endl;
00132                                 stream << "<row ";
00133                                 stream << "x=\"" << glm::row(mat, 3)[0] << "\" ";
00134                                 stream << "y=\"" << glm::row(mat, 3)[1] << "\" ";
00135                                 stream << "z=\"" << glm::row(mat, 3)[2] << "\" ";
00136                                 stream << "w=\"" << glm::row(mat, 3)[3] << "\" ";
00137                                 stream << "/>" << std::endl;
00138                                 stream << "</glm_mat4>";
00139                         
00140                                 return stream;
00141                         }
00142                 }
00143         }
00144 }
00145 
00146 namespace glm{using namespace glm::virtrev_glmext::xstream;}
00147 
00148 #endif//GLM_EXT_VIRTREV_XSTREAM_HPP