[mareframe] View of /trunk/gadget/doublevector.cc
View of /trunk/gadget/doublevector.cc
Parent Directory
| Revision Log
Revision 11 -
( download)
( annotate)
Thu Jul 23 19:00:38 2015 UTC
(8 years, 11 months ago)
by ulcessvp
File size: 2425 byte(s)
Version openmp, reproducible y especuativa. Instrucciones compilacion en el Makefile
#include "doublevector.h"
#include "gadget.h"
DoubleVector::DoubleVector(int sz) {
size = (sz > 0 ? sz : 0);
if (size > 0)
v = new double[size];
else
v = 0;
}
DoubleVector::DoubleVector(int sz, double value) {
size = (sz > 0 ? sz : 0);
int i;
if (size > 0) {
v = new double[size];
for (i = 0; i < size; i++)
v[i] = value;
} else
v = 0;
}
DoubleVector::DoubleVector(const DoubleVector& initial) {
size = initial.size;
int i;
if (size > 0) {
v = new double[size];
for (i = 0; i < size; i++)
v[i] = initial.v[i];
} else
v = 0;
}
DoubleVector::~DoubleVector() {
if (v != 0) {
delete[] v;
v = 0;
}
}
void DoubleVector::Initialize(int sz, double value) {
size = (sz > 0 ? sz : 0);
int i;
if (size > 0) {
v = new double[size];
for (i = 0; i < size; i++)
v[i] = value;
} else
v = 0;
}
void DoubleVector::resize(int addsize, double value) {
if (addsize <= 0)
return;
int i;
if (v == 0) {
size = addsize;
v = new double[size];
for (i = 0; i < size; i++)
v[i] = value;
} else if (addsize > 0) {
double* vnew = new double[size + addsize];
for (i = 0; i < size; i++)
vnew[i] = v[i];
for (i = size; i < size + addsize; i++)
vnew[i] = value;
delete[] v;
v = vnew;
size += addsize;
}
}
void DoubleVector::Delete(int pos) {
int i;
if (size > 1) {
double* vnew = new double[size - 1];
for (i = 0; i < pos; i++)
vnew[i] = v[i];
for (i = pos; i < size - 1; i++)
vnew[i] = v[i + 1];
delete[] v;
v = vnew;
size--;
} else {
delete[] v;
v = 0;
size = 0;
}
}
void DoubleVector::Reset() {
if (size > 0) {
delete[] v;
v = 0;
size = 0;
}
}
void DoubleVector::setToZero() {
int i;
for (i = 0; i < size; i++)
v[i] = 0.0;
}
double DoubleVector::operator * (const DoubleVector& d) const {
double result = 0.0;
int i;
if (size == d.size)
for (i = 0; i < size; i++)
result += (d[i] * v[i]);
return result;
}
DoubleVector& DoubleVector::operator = (const DoubleVector& d) {
int i;
if (size == d.size) {
for (i = 0; i < size; i++)
v[i] = d[i];
return *this;
}
if (v != 0) {
delete[] v;
v = 0;
}
size = d.size;
if (size > 0) {
v = new double[size];
for (i = 0; i < size; i++)
v[i] = d.v[i];
} else
v = 0;
return *this;
}
|