Log In | Get Help   
Home My Page Projects Code Snippets Project Openings Mareframe
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files
[mareframe] Annotation of /trunk/paramin-beta/vector.cc
[mareframe] / trunk / paramin-beta / vector.cc Repository:
ViewVC logotype

Annotation of /trunk/paramin-beta/vector.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (view) (download)

1 : agomez 1 #include "vector.h"
2 :    
3 :     Vector::Vector() {
4 :     p = NULL;
5 :     dim = 0;
6 :     }
7 :    
8 :     Vector::Vector(int n) {
9 :     int i;
10 :     if (n < 1) {
11 :     cerr << "Error in vector - invalid number of parameters in vector\n";
12 :     exit(EXIT_FAILURE);
13 :     }
14 :     dim = n;
15 :     p = new DFP[dim];
16 :     for (i = 0; i < dim; i++)
17 :     p[i] = 0.0;
18 :     }
19 :    
20 :     Vector::Vector(DFP* f, int numVar) {
21 :     int i;
22 :     if (numVar < 1) {
23 :     cerr << "Error in vector - invalid number of parameters in vector\n";
24 :     exit(EXIT_FAILURE);
25 :     }
26 :     dim = numVar;
27 :     p = new DFP[dim];
28 :     for (i = 0; i < dim; i++)
29 :     p[i] = f[i];
30 :     }
31 :    
32 :     Vector::Vector(const Vector& v) {
33 :     int i;
34 :     if (v.dim == 0) {
35 :     p = NULL;
36 :     dim = 0;
37 :     } else if (v.dim >= 1) {
38 :     dim = v.dim;
39 :     p = new DFP[dim];
40 :     for (i = 0; i < dim; i++)
41 :     p[i] = v[i];
42 :     } else {
43 :     cerr << "Error in vector - invalid number of parameters in vector\n";
44 :     exit(EXIT_FAILURE);
45 :     }
46 :     }
47 :    
48 :     Vector::~Vector() {
49 :     if (dim > 0) {
50 :     delete[] p;
51 :     p = NULL;
52 :     dim = 0;
53 :     }
54 :     }
55 :    
56 :     Vector& Vector::operator = (const Vector& v) {
57 :     int i;
58 :     if (dim > 0) {
59 :     delete[] p;
60 :     p = NULL;
61 :     dim = 0;
62 :     }
63 :     if (v.dim > 0) {
64 :     p = new DFP [v.dim];
65 :     dim = v.dim; //What if v is NULL??????
66 :     for (i = 0; i < dim; i++)
67 :     p[i] = v[i];
68 :     } else if (v.dim == 0) {
69 :     p = NULL;
70 :     dim = 0;
71 :     } else {
72 :     cerr << "Error in vector - invalid number of parameters in vector\n";
73 :     exit(EXIT_FAILURE);
74 :     }
75 :     return (*this);
76 :     }
77 :    
78 :     // Vector addition, subtraction and multiplication
79 :     Vector operator + (const Vector& v1, const Vector& v2) {
80 :     assert(v1.dim == v2.dim);
81 :     assert(v1.dim > 0);
82 :    
83 :     int i;
84 :     Vector result(v1.dim);
85 :     for (i = 0; i < v1.dim; i++)
86 :     result.p[i] = v1.p[i] + v2.p[i];
87 :     return result;
88 :     }
89 :    
90 :     Vector operator - (const Vector& v1, const Vector& v2) {
91 :     assert(v1.dim == v2.dim);
92 :     assert(v1.dim > 0);
93 :    
94 :     int i;
95 :     Vector result(v1.dim);
96 :     for (i = 0; i < v1.dim; i++)
97 :     result.p[i] = v1.p[i] - v2.p[i];
98 :     return result;
99 :     }
100 :    
101 :     Vector operator - (const Vector& v1) {
102 :     assert(v1.dim > 0);
103 :    
104 :     int i;
105 :     Vector result(v1.dim);
106 :     for (i = 0; i < v1.dim; i++)
107 :     result.p[i] = -v1.p[i];
108 :     return result;
109 :     }
110 :    
111 :     Vector operator * (DFP a, const Vector& v1) {
112 :     assert(v1.dim > 0);
113 :    
114 :     int i;
115 :     Vector result(v1.dim);
116 :     for (i = 0; i < v1.dim; i++)
117 :     result.p[i] = a * v1.p[i];
118 :     return result;
119 :     }
120 :    
121 :     Vector operator * (const Vector& v1, DFP a) {
122 :     assert(v1.dim > 0);
123 :    
124 :     int i;
125 :     Vector result(v1.dim);
126 :     for (i = 0; i < v1.dim; i++)
127 :     result.p[i] = v1.p[i] * a;
128 :     return result;
129 :     }
130 :    
131 :     DFP operator * (const Vector& v1, const Vector& v2) {
132 :     assert(v1.dim == v2.dim);
133 :     assert(v1.dim > 0);
134 :    
135 :     int i;
136 :     DFP result = 0.0;
137 :     for (i = 0; i < v1.dim; i++)
138 :     result += (v1.p[i] * v2.p[i]);
139 :     return result;
140 :     }
141 :    
142 :     int operator < (const Vector& v1, const Vector& v2) {
143 :     assert(v1.dim == v2.dim);
144 :     assert(v1.dim > 0);
145 :    
146 :     int i;
147 :     for (i = 0; i < v1.dim; i++)
148 :     if (v1[i] < v2[i])
149 :     return 1;
150 :    
151 :     return 0;
152 :     }
153 :    
154 :     int operator > (const Vector& v1, const Vector& v2) {
155 :     assert(v1.dim == v2.dim);
156 :     assert(v1.dim > 0);
157 :    
158 :     int i;
159 :     for (i = 0; i < v1.dim; i++)
160 :     if (v1[i] > v2[i])
161 :     return 1;
162 :    
163 :     return 0;
164 :     }
165 :    
166 :     int operator == (const Vector& v1, const Vector& v2) {
167 :     int i;
168 :     if ((v1.dim == 0) && (v2.dim == 0)) {
169 :     return 1;
170 :     } else if ((v1.dim < 0) || (v2.dim < 0)) {
171 :     return 0;
172 :     } else if (v1.dim != v2.dim) {
173 :     return 0;
174 :    
175 :     } else {
176 :     for (i = 0; i < v1.dim; i++)
177 :     if (v1[i] != v2[i])
178 :     return 0;
179 :     return 1;
180 :     }
181 :     }
182 :    
183 :     int operator != (const Vector& v1, const Vector& v2) {
184 :     return !(v1 == v2);
185 :     }
186 :    
187 :     DFP& Vector::operator [] (int i) const {
188 :     assert(dim > 0);
189 :     if ((i < 0) || (i >= dim)) {
190 :     cerr << "Error in vector - invalid reference to vector\n";
191 :     exit(EXIT_FAILURE);
192 :     }
193 :     return (p[i]);
194 :     }
195 :    
196 :     DFP Vector::magnitude() {
197 :     assert(dim > 0);
198 :     int i;
199 :     DFP m = 0.0;
200 :     for (i = 0; i < dim; i++)
201 :     m += p[i] * p[i];
202 :     return sqrt(m);
203 :     }
204 :    
205 :     Vector normalize(Vector& v1) {
206 :     assert(v1.dimension() > 0);
207 :     int i;
208 :     Vector newVector(v1.dimension());
209 :     DFP m = v1.magnitude();
210 :     if (m == 0) {
211 :     cerr << "Error in vector - cannot normalize vector with zero magnitude\n";
212 :     exit(EXIT_FAILURE);
213 :     }
214 :     for (i = 0; i < v1.dimension(); i++)
215 :     newVector[i] = (v1[i] / m);
216 :     return newVector;
217 :     }
218 :    
219 :     istream& operator >> (istream& is, Vector& v1) {
220 :     int i;
221 :     char tmp; // = ' ';
222 :     for (i = 0; i < v1.dim; i++) {
223 :     if (i == v1.dim - 1)
224 :     is >> v1[i];
225 :     else
226 :     is >> v1[i] >> tmp;
227 :     }
228 :     return is;
229 :     }
230 :    
231 :     ostream& operator << (ostream& os, const Vector& v) {
232 :     int i;
233 :     for (i = 0; i < v.dim; i++)
234 :     os << v[i] << sep;
235 :     os << endl;
236 :     return os;
237 :     }
238 :    
239 :     int Vector::dimension() const {
240 :     return dim;
241 :     }
242 :    
243 :     void Vector::setValue(DFP f) {
244 :     int i;
245 :     for (i = 0; i < dim; i++)
246 :     p[i] = f;
247 :     }

root@forge.cesga.es
ViewVC Help
Powered by ViewVC 1.0.0  

Powered By FusionForge