summaryrefslogtreecommitdiffstats
path: root/engine/include/symbasic/dvector.hpp
blob: 99dadee3a8c1b05337658612b024e0d788ccc860 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#ifndef __DVECTOR_H__
#define __DVECTOR_H__

#include <vector>
#include <initializer_list>

#include "vector.h"

template<class T>
class DVector : public Vector<T>
{

public :

    DVector(size_t dim = 0);
	DVector(const std::vector<T>&);
    DVector(const std::initializer_list<T> &init);

	virtual const size_t size() const override;

	virtual T& operator[](size_t i) override;
	virtual const T& operator[](size_t i) const override;

    DVector& operator<<(const T&);

    /* Plus / minus */
    DVector<T>& operator+=(const Vector<T>&);
    DVector<T>& operator-=(const Vector<T>&);

    /* Scalar multiplication / division */
    DVector<T>& operator*=(double k);
    DVector<T>& operator/=(double k);

    /* Reverse operator */
    DVector<T>& operator~();

    /* Unit vector */
    DVector<T>& unit();
    
private:

    std::vector<T> components; 
};

template<class T>
const DVector<T> operator+(DVector<T> , const Vector<T>& );

template<class T>
const DVector<T> operator-(DVector<T> , const Vector<T>& );

template<class T>
const DVector<T> operator*(DVector<T> , double);

template<class T>
const DVector<T> operator/(DVector<T> , double);

/*template<class T>
const DVector<T> operator+(const Vector<T>&, DVector<T>);

template<class T>
const DVector<T> operator-(const Vector<T>&, DVector<T>);*/

template<class T>
const DVector<T> operator*(double, DVector<T>);

template<class T>
const DVector<T> operator/(double, DVector<T>);


template<class T>
const DVector<T> operator-(DVector<T>);

inline const DVector<double> operator^(const DVector<double>& v, const Vector<double>&);

/*
 * Include definitions file
 */
#include "dvector.tpp"

#endif