Преглед изворни кода

Remove unused file.

legacy
Sam Hocevar sam пре 14 година
родитељ
комит
9554373756
1 измењених фајлова са 0 додато и 132 уклоњено
  1. +0
    -132
      src/array.h

+ 0
- 132
src/array.h Прегледај датотеку

@@ -1,132 +0,0 @@
//
// Lol Engine
//
// Copyright: (c) 2010-2011 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://sam.zoy.org/projects/COPYING.WTFPL for more details.
//

//
// The Matrix classes
// ------------------
//

#if !defined __DH_MATRIX_H__
#define __DH_MATRIX_H__

#include <cmath>

#define VECTOR_OP(elems, op) \
template<typename U> \
inline Vec##elems<T> operator op(Vec##elems<U> const &val) const \
{ \
Vec##elems<T> ret; \
for (int n = 0; n < elems; n++) \
ret[n] = (*this)[n] op val[n]; \
return ret; \
}

#define SCALAR_OP(elems, op) \
inline Vec##elems<T> operator op(T const &val) const \
{ \
Vec##elems<T> ret; \
for (int n = 0; n < elems; n++) \
ret[n] = (*this)[n] op val; \
return ret; \
}

#define OPERATORS(elems) \
inline T& operator[](int n) { return *(&x + n); } \
inline T const& operator[](int n) const { return *(&x + n); } \
\
VECTOR_OP(elems, -) \
VECTOR_OP(elems, +) \
VECTOR_OP(elems, *) \
VECTOR_OP(elems, /) \
\
SCALAR_OP(elems, -) \
SCALAR_OP(elems, +) \
SCALAR_OP(elems, *) \
SCALAR_OP(elems, /) \
\
template<typename U> \
inline operator Vec##elems<U>() const \
{ \
Vec##elems<U> ret; \
for (int n = 0; n < elems; n++) \
ret[n] = static_cast<U>((*this)[n]); \
return ret; \
} \
\
inline T sqlen() const \
{ \
T acc = 0; \
for (int n = 0; n < elems; n++) \
acc += (*this)[n] * (*this)[n]; \
return acc; \
} \
\
inline float len() const \
{ \
return sqrtf((float)sqlen()); \
}

template <typename T> struct Vec2
{
inline Vec2() { x = y = 0; }
inline Vec2(T val) { x = y = val; }
inline Vec2(T _x, T _y) { x = _x; y = _y; }

OPERATORS(2)

union { T x; T a; T i; };
union { T y; T b; T j; };
};

typedef Vec2<float> Float2;
typedef Vec2<int> Int2;

template <typename T> struct Vec3
{
inline Vec3() { x = y = z = 0; }
inline Vec3(T val) { x = y = z = val; }
inline Vec3(T _x, T _y, T _z) { x = _x; y = _y; z = _z; }

OPERATORS(3)

union { T x; T a; T i; };
union { T y; T b; T j; };
union { T z; T c; T k; };
};

typedef Vec3<float> Float3;
typedef Vec3<int> Int3;

#define SCALAR_GLOBAL(elems, op, U) \
template<typename T> \
static inline Vec##elems<U> operator op(U const &val, \
Vec##elems<T> const &that) \
{ \
Vec##elems<U> ret; \
for (int n = 0; n < elems; n++) \
ret[n] = val op that[n]; \
return ret; \
}

#define SCALAR_GLOBAL2(elems, op) \
SCALAR_GLOBAL(elems, op, int) \
SCALAR_GLOBAL(elems, op, float)

#define GLOBALS(elems) \
SCALAR_GLOBAL2(elems, -) \
SCALAR_GLOBAL2(elems, +) \
SCALAR_GLOBAL2(elems, *) \
SCALAR_GLOBAL2(elems, /)

GLOBALS(2)
GLOBALS(3)

#endif // __DH_MATRIX_H__


Loading…
Откажи
Сачувај