|
- //
- // Lol Engine
- //
- // Copyright: (c) 2010-2014 Sam Hocevar <sam@hocevar.net>
- // This program is free software; you can redistribute it and/or
- // modify it under the terms of the Do What The Fuck You Want To
- // Public License, Version 2, as published by Sam Hocevar. See
- // http://www.wtfpl.net/ for more details.
- //
-
- #include <lol/engine-internal.h>
-
- #include <ostream> /* std::ostream */
-
- namespace lol
- {
-
- #define LOL_PRINTF_TOSTRING(type, ...) \
- template<> void type::printf() const { Log::Debug(__VA_ARGS__); } \
- template<> String type::tostring() const { return String::Printf(__VA_ARGS__); }
-
- LOL_PRINTF_TOSTRING(vec2, "[ %6.6f %6.6f ]\n", x, y);
- LOL_PRINTF_TOSTRING(ivec2, "[ %i %i ]\n", x, y);
- LOL_PRINTF_TOSTRING(cmplx, "[ %6.6f %6.6f ]\n", x, y);
- LOL_PRINTF_TOSTRING(vec3, "[ %6.6f %6.6f %6.6f ]\n", x, y, z);
- LOL_PRINTF_TOSTRING(ivec3, "[ %i %i %i ]\n", x, y, z);
- LOL_PRINTF_TOSTRING(vec4, "[ %6.6f %6.6f %6.6f %6.6f ]\n", x, y, z, w);
- LOL_PRINTF_TOSTRING(ivec4, "[ %i %i %i %i ]\n", x, y, z, w);
- LOL_PRINTF_TOSTRING(quat, "[ %6.6f %6.6f %6.6f %6.6f ]\n", w, x, y, z);
-
- template<> void mat2::printf() const
- {
- mat2 const &p = *this;
-
- Log::Debug("[ %6.6f %6.6f\n", p[0][0], p[1][0]);
- Log::Debug(" %6.6f %6.6f ]\n", p[0][1], p[1][1]);
- }
-
- template<> String mat2::tostring() const
- {
- mat2 const &p = *this;
-
- return String::Printf("[ %6.6f %6.6f\n", p[0][0], p[1][0]) +
- String::Printf(" %6.6f %6.6f ]\n", p[0][1], p[1][1]);
- }
-
- template<> void mat3::printf() const
- {
- mat3 const &p = *this;
-
- Log::Debug("[ %6.6f %6.6f %6.6f\n", p[0][0], p[1][0], p[2][0]);
- Log::Debug(" %6.6f %6.6f %6.6f\n", p[0][1], p[1][1], p[2][1]);
- Log::Debug(" %6.6f %6.6f %6.6f ]\n", p[0][2], p[1][2], p[2][2]);
- }
-
- template<> String mat3::tostring() const
- {
- mat3 const &p = *this;
-
- return String::Printf("[ %6.6f %6.6f %6.6f\n", p[0][0], p[1][0], p[2][0]) +
- String::Printf(" %6.6f %6.6f %6.6f\n", p[0][1], p[1][1], p[2][1]) +
- String::Printf(" %6.6f %6.6f %6.6f ]\n", p[0][2], p[1][2], p[2][2]);
- }
-
- template<> void mat4::printf() const
- {
- mat4 const &p = *this;
-
- Log::Debug("[ %6.6f %6.6f %6.6f %6.6f\n",
- p[0][0], p[1][0], p[2][0], p[3][0]);
- Log::Debug(" %6.6f %6.6f %6.6f %6.6f\n",
- p[0][1], p[1][1], p[2][1], p[3][1]);
- Log::Debug(" %6.6f %6.6f %6.6f %6.6f\n",
- p[0][2], p[1][2], p[2][2], p[3][2]);
- Log::Debug(" %6.6f %6.6f %6.6f %6.6f ]\n",
- p[0][3], p[1][3], p[2][3], p[3][3]);
- }
-
- template<> String mat4::tostring() const
- {
- mat4 const &p = *this;
-
- return String::Printf("[ %6.6f %6.6f %6.6f %6.6f\n",
- p[0][0], p[1][0], p[2][0], p[3][0]) +
- String::Printf(" %6.6f %6.6f %6.6f %6.6f\n",
- p[0][1], p[1][1], p[2][1], p[3][1]) +
- String::Printf(" %6.6f %6.6f %6.6f %6.6f\n",
- p[0][2], p[1][2], p[2][2], p[3][2]) +
- String::Printf(" %6.6f %6.6f %6.6f %6.6f ]\n",
- p[0][3], p[1][3], p[2][3], p[3][3]);
- }
-
- template<> std::ostream &operator<<(std::ostream &stream, ivec2 const &v)
- {
- return stream << "(" << v.x << ", " << v.y << ")";
- }
-
- template<> std::ostream &operator<<(std::ostream &stream, ivec3 const &v)
- {
- return stream << "(" << v.x << ", " << v.y << ", " << v.z << ")";
- }
-
- template<> std::ostream &operator<<(std::ostream &stream, ivec4 const &v)
- {
- return stream << "(" << v.x << ", " << v.y << ", "
- << v.z << ", " << v.w << ")";
- }
-
- template<> std::ostream &operator<<(std::ostream &stream, vec2 const &v)
- {
- return stream << "(" << v.x << ", " << v.y << ")";
- }
-
- template<> std::ostream &operator<<(std::ostream &stream, cmplx const &v)
- {
- return stream << "(" << v.x << ", " << v.y << ")";
- }
-
- template<> std::ostream &operator<<(std::ostream &stream, vec3 const &v)
- {
- return stream << "(" << v.x << ", " << v.y << ", " << v.z << ")";
- }
-
- template<> std::ostream &operator<<(std::ostream &stream, vec4 const &v)
- {
- return stream << "(" << v.x << ", " << v.y << ", "
- << v.z << ", " << v.w << ")";
- }
-
- template<> std::ostream &operator<<(std::ostream &stream, quat const &v)
- {
- return stream << "(" << v.x << ", " << v.y << ", "
- << v.z << ", " << v.w << ")";
- }
-
- template<> std::ostream &operator<<(std::ostream &stream, mat4 const &m)
- {
- stream << "((" << m[0][0] << ", " << m[1][0]
- << ", " << m[2][0] << ", " << m[3][0] << "), ";
- stream << "(" << m[0][1] << ", " << m[1][1]
- << ", " << m[2][1] << ", " << m[3][1] << "), ";
- stream << "(" << m[0][2] << ", " << m[1][2]
- << ", " << m[2][2] << ", " << m[3][2] << "), ";
- stream << "(" << m[0][3] << ", " << m[1][3]
- << ", " << m[2][3] << ", " << m[3][3] << "))";
- return stream;
- }
-
- } /* namespace lol */
|