#ifndef __DARKRL__VECTOR_HPP__ #define __DARKRL__VECTOR_HPP__ #include <assert.h> #include <algorithm> #include <math.h> #include <stdint.h> #include "Math.hpp" template<class T> struct Vector2 { … }; template<class T> Vector2<T> operator+( const Vector2<T>& lhs, const Vector2<T>& rhs ) { … } template<class T> Vector2<T> operator-( const Vector2<T>& lhs, const Vector2<T>& rhs ) { … } template<class T> Vector2<T> operator*( const Vector2<T>& lhs, const float& rhs ) { … } template<class T> Vector2<T> operator/( const Vector2<T>& lhs, const T& rhs ) { … } v2i; v2f; template<class T> struct Vector3 { … }; template<class T> Vector3<T> operator+( const Vector3<T>& lhs, const Vector3<T>& rhs ) { … } template<class T> Vector3<T> operator-( const Vector3<T>& lhs, const Vector3<T>& rhs ) { … } template<class T> Vector3<T> operator*( const Vector3<T>& lhs, const Vector3<T>& rhs ) { … } template<class T> Vector3<T> operator*( const Vector3<T>& lhs, const float& rhs ) { … } template<class T> Vector3<T> operator/( const Vector3<T>& lhs, const T& rhs ) { … } template<class T> bool operator<( const Vector3<T>& lhs, const Vector3<T>& rhs ) { … } v3i; v3f; v3b; static inline v3b v3f_to_v3b( const v3f& v ) { … } template<class T> Vector3<T> Mix( const Vector3<T>& v1, const Vector3<T>& v2, float amount ) { … } template<> inline v3b Mix( const v3b& v1, const v3b& v2, float amount ) { … } template<class T> Vector3<T> Desaturate( const Vector3<T>& v ) { … } template<class T> Vector3<T> Desaturate( const Vector3<T>& v, float mul ) { … } template<class T> Vector3<T> pow( const Vector3<T>& base, float exponent ) { … } template<class T> Vector3<T> sRGB2linear( const Vector3<T>& v ) { … } template<class T> Vector3<T> linear2sRGB( const Vector3<T>& v ) { … } #endif