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] View of /trunk/gadget/doublematrix.cc
[mareframe] / trunk / gadget / doublematrix.cc Repository:
ViewVC logotype

View of /trunk/gadget/doublematrix.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (download) (annotate)
Mon Feb 10 17:09:07 2014 UTC (10 years, 3 months ago) by agomez
File size: 2450 byte(s)
Initial version based on Gadget 2.2.00
#include "doublematrix.h"
#include "mathfunc.h"
#include "gadget.h"

DoubleMatrix::DoubleMatrix(int nr, int nc, double value) {
  nrow = nr;
  v = new DoubleVector*[nr];
  int i, j;
  for (i = 0; i < nr; i++)
    v[i] = new DoubleVector(nc);
  for (i = 0; i < nr; i++) {
    for (j = 0; j < nc; j++)
      (*v[i])[j] = value;
  }
}

DoubleMatrix::DoubleMatrix(const DoubleMatrix& initial) : nrow(initial.nrow) {
  int i;
  if (nrow >= 0) {
    v = new DoubleVector*[nrow];
    for (i = 0; i < nrow; i++)
      v[i] = new DoubleVector(initial[i]);
  } else {
    v = 0;
    nrow = 0;
  }
}

DoubleMatrix::~DoubleMatrix() {
  int i;
  if (v != 0) {
    for (i = 0; i < nrow; i++)
      delete v[i];
    delete[] v;
    v = 0;
  }
}

void DoubleMatrix::AddRows(int add, int length, double value) {
  if (add <= 0)
    return;

  int i;
  if (v == 0) {
   nrow = add;
   v = new DoubleVector*[nrow];
   for (i = 0; i < nrow; i++)
     v[i] = new DoubleVector(length, value);

  } else {
    DoubleVector** vnew = new DoubleVector*[nrow + add];
    for (i = 0; i < nrow; i++)
      vnew[i] = v[i];
    for (i = nrow; i < nrow + add; i++)
      vnew[i] = new DoubleVector(length, value);
    delete[] v;
    v = vnew;
    nrow += add;
  }
}

void DoubleMatrix::Delete(int pos) {
  delete v[pos];
  int i;
  if (nrow > 1) {
    DoubleVector** vnew = new DoubleVector*[nrow - 1];
    for (i = 0; i < pos; i++)
      vnew[i] = v[i];
    for (i = pos; i < nrow - 1; i++)
      vnew[i] = v[i + 1];
    delete[] v;
    v = vnew;
    nrow--;
  } else {
    delete[] v;
    v = 0;
    nrow = 0;
  }
}

DoubleMatrix& DoubleMatrix::operator = (const DoubleMatrix& d) {
  int i;
  if (v != 0) {
    for (i = 0; i < nrow; i++)
      delete v[i];
    delete[] v;
  }

  nrow = d.nrow;
  if (nrow > 0) {
    v = new DoubleVector*[nrow];
    for (i = 0; i < nrow; i++)
      v[i] = new DoubleVector(d[i]);

  } else
    v = 0;

  return *this;
}

void DoubleMatrix::Reset() {
  if (nrow > 0) {
    int i;
    for (i = 0; i < nrow; i++)
      delete v[i];
    delete[] v;
    v = 0;
    nrow = 0;
  }
}

void DoubleMatrix::Print(ofstream& outfile) const {
  int i, j;
  for (i = 0; i < nrow; i++) {
    outfile << TAB;
    for (j = 0; j < v[i]->Size(); j++)
      outfile << setw(smallwidth) << setprecision(smallprecision) << (*v[i])[j] << sep;
    outfile << endl;
  }
}

void DoubleMatrix::setToZero() {
  int i;
  for (i = 0; i < nrow; i++)
    (*v[i]).setToZero();
}

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

Powered By FusionForge