#ifndef __STATIC_VECTOR_H__ #define __STATIC_VECTOR_H__ #include #include "vector.h" template class SVector : public Vector { public: /* Constructors */ SVector(const T &value = T()); SVector(const std::initializer_list &init); SVector(const SVector&); SVector& operator=(const SVector&); virtual const size_t size() const override; virtual T& operator[](size_t i) override; virtual const T& operator[](size_t i) const override; /* Plus / minus */ SVector& operator+=(const Vector&); SVector& operator-=(const Vector&); /* Scalar multiplication / division */ SVector& operator*=(double k); SVector& operator/=(double k); /* Reverse operator */ SVector& operator~(); /* Unit vector */ SVector& unit(); private: std::array components; }; template const SVector operator+(SVector , const Vector& ); template const SVector operator-(SVector , const Vector& ); template const SVector operator*(SVector , double); template const SVector operator/(SVector , double); template const SVector operator*(double, SVector); template const SVector operator/(double, SVector); template const SVector operator-(SVector); /* * Prototipe for cross product */ inline const SVector operator^(const SVector& v, const SVector& w); inline double operator^(const SVector& v, const SVector& w); inline double operator^(const SVector& v, const SVector& w); /* * Include definitions file */ #include "svector.tpp" #endif // __SVECTOR_H__