MaMiCo 1.2
Loading...
Searching...
No Matches
Vector.h
1// Copyright (C) 2015 Technische Universitaet Muenchen
2// This file is part of the Mamico project. For conditions of distribution
3// and use, please see the copyright notice in Mamico's main folder, or at
4// www5.in.tum.de/mamico
5#ifndef _TARCH_LA_VECTOR_H_
6#define _TARCH_LA_VECTOR_H_
7#include "tarch/TarchDefinitions.h"
8#include <cmath>
9#include <iostream>
10#include <type_traits>
11
12namespace tarch {
13namespace la {
14template <int size, class T> class Vector;
15}
16} // namespace tarch
17
23
24template <int size, class T> class tarch::la::Vector {
25private:
26 T _entries[size];
27
28public:
29 Vector() {}
33
34 Vector(const T& t) {
35 for (int i = 0; i < size; i++) {
36 _entries[i] = t;
37 }
38 }
39
43 Vector(const T& t0, const T& t1) {
44 static_assert(size == 2, "ERROR Vector(t0,t1) only valid for 2D vectors!");
45 _entries[0] = t0;
46 _entries[1] = t1;
47 }
48
53 Vector(const T& t0, const T& t1, const T& t2) {
54 static_assert(size == 3, "ERROR Vector(t0,t1,t2) only valid for 3D vectors!");
55 _entries[0] = t0;
56 _entries[1] = t1;
57 _entries[2] = t2;
58 }
59
62 Vector(const Vector<size, T>& v) {
63 for (int i = 0; i < size; i++) {
64 _entries[i] = v[i];
65 }
66 }
67
70 void assign(const T& t) {
71 for (int i = 0; i < size; i++) {
72 _entries[i] = t;
73 }
74 }
75
78 Vector<size, T>& operator=(const Vector<size, T>& v) {
79 for (int i = 0; i < size; i++) {
80 _entries[i] = v[i];
81 }
82 return *this;
83 }
84
88 T& operator[](int i) {
89#if (TARCH_DEBUG == TARCH_YES)
90 if (i < 0 || i > size - 1) {
91 std::cout << "ERROR Vector T& operator[]: i out of range!" << std::endl;
92 exit(EXIT_FAILURE);
93 }
94#endif
95 return _entries[i];
96 }
97
101 const T& operator[](int i) const {
102#if (TARCH_DEBUG == TARCH_YES)
103 if (i < 0 || i > size - 1) {
104 std::cout << "ERROR Vector const T& operator[]: i out of range!" << std::endl;
105 exit(EXIT_FAILURE);
106 }
107#endif
108 return _entries[i];
109 }
110
113 Vector<size, T>& operator+=(const Vector<size, T>& v) {
114 for (int i = 0; i < size; i++) {
115 _entries[i] += v[i];
116 }
117 return *this;
118 }
119
123 Vector<size, T>& operator-=(const Vector<size, T>& v) {
124 for (int i = 0; i < size; i++) {
125 _entries[i] -= v[i];
126 }
127 return *this;
128 }
129
131 template <class convert_to_T> explicit operator Vector<size, convert_to_T>() const {
132 Vector<size, convert_to_T> ans;
133 for (unsigned int i = 0; i < size; i++) {
134 ans[i] = static_cast<convert_to_T>(_entries[i]);
135 }
136 return ans;
137 }
138};
139
140#include "VectorOperations.cpph"
141#endif // _TARCH_LA_VECTOR_H_
Definition Vector.h:24
T & operator[](int i)
operator overloading; access to vector entries; both () and [] are allowed
Definition Vector.h:88
Vector< size, T > & operator+=(const Vector< size, T > &v)
operator overloading; add a vector to this existing one (this)
Definition Vector.h:113
Vector(const T &t0, const T &t1, const T &t2)
special constructor for 3D; left empty for general purpose vector
Definition Vector.h:53
Vector< size, T > & operator=(const Vector< size, T > &v)
operator overloading for vector assignment
Definition Vector.h:78
Vector< size, T > & operator-=(const Vector< size, T > &v)
operator overloading; subtracts a vector from the existing one (this)
Definition Vector.h:123
const T & operator[](int i) const
operator overloading; access to vector entries; both () and [] are allowed; !!! Attention: const
Definition Vector.h:101
Vector(const T &t)
init. vector with a scalar value.
Definition Vector.h:34
void assign(const T &t)
assigns a value to all vector entries.
Definition Vector.h:70
Vector(const T &t0, const T &t1)
special constructor for 2D left empty for general purpose vector
Definition Vector.h:43
Vector(const Vector< size, T > &v)
constructor init. vector from vector
Definition Vector.h:62
Definition Matrix.h:10
Definition Configuration.h:11