Bladeren bron

Added tostring to vectors, similar to printf, but with tostring.

undefined
Benjamin ‘Touky’ Huet Sam Hocevar <sam@hocevar.net> 10 jaren geleden
bovenliggende
commit
60887138ff
2 gewijzigde bestanden met toevoegingen van 47 en 39 verwijderingen
  1. +5
    -1
      src/lol/math/vector.h
  2. +42
    -38
      src/math/vector.cpp

+ 5
- 1
src/lol/math/vector.h Bestand weergeven

@@ -178,7 +178,8 @@ template<typename T, int N> struct XVec4
return ret; \
} \
\
void printf() const;
void printf() const; \
String tostring() const;

/*
* 2-element vectors
@@ -1616,6 +1617,7 @@ template <typename T> struct Mat2
}

void printf() const;
String tostring() const;

template<class U>
friend std::ostream &operator<<(std::ostream &stream, Mat2<U> const &m);
@@ -1742,6 +1744,7 @@ template <typename T> struct Mat3
}

void printf() const;
String tostring() const;

template<class U>
friend std::ostream &operator<<(std::ostream &stream, Mat3<U> const &m);
@@ -1915,6 +1918,7 @@ template <typename T> struct Mat4
static Mat4<T> shifted_perspective(T fov_y, T screen_size, T screen_ratio_yx, T near, T far);

void printf() const;
String tostring() const;

template<class U>
friend std::ostream &operator<<(std::ostream &stream, Mat4<U> const &m);


+ 42
- 38
src/math/vector.cpp Bestand weergeven

@@ -171,52 +171,33 @@ template<> mat4 inverse(mat4 const &mat)
return ret;
}

template<> void vec2::printf() const
{
Log::Debug("[ %6.6f %6.6f ]\n", x, y);
}

template<> void ivec2::printf() const
{
Log::Debug("[ %i %i ]\n", x, y);
}

template<> void cmplx::printf() const
{
Log::Debug("[ %6.6f %6.6f ]\n", x, y);
}

template<> void vec3::printf() const
{
Log::Debug("[ %6.6f %6.6f %6.6f ]\n", x, y, z);
}

template<> void ivec3::printf() const
{
Log::Debug("[ %i %i %i ]\n", x, y, z);
}
#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 vec4::printf() const
{
Log::Debug("[ %6.6f %6.6f %6.6f %6.6f ]\n", x, y, z, w);
}

template<> void ivec4::printf() const
template<> void mat2::printf() const
{
Log::Debug("[ %i %i %i %i ]\n", x, y, z, w);
}
mat2 const &p = *this;

template<> void quat::printf() const
{
Log::Debug("[ %6.6f %6.6f %6.6f %6.6f ]\n", w, x, y, z);
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<> void mat2::printf() const
template<> String mat2::tostring() 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]);
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
@@ -228,6 +209,15 @@ template<> void mat3::printf() const
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;
@@ -242,6 +232,20 @@ template<> void mat4::printf() const
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 << ")";


Laden…
Annuleren
Opslaan