CPPLapack
Public Member Functions | Public Attributes | Friends
_drovector Class Reference

(DO NOT USE) Smart-temporary Real Double-precision Row Vector Class More...

#include <_drovector.hpp>

List of all members.

Public Member Functions

 _drovector ()
 _drovector (const _drovector &)
 ~_drovector ()
_zrovector to_zrovector () const
double & operator() (const long &) const
void write (const char *) const
void nullify () const
void destroy () const

Public Attributes

long l
 vector size
long cap
 vector capacity
double * array
 1D array to store vector data

Friends

std::ostream & operator<< (std::ostream &, const _drovector &)
_dcovector t (const drovector &)
double nrm2 (const drovector &)
long idamax (const drovector &)
double damax (const drovector &)
const _drovectoroperator+ (const _drovector &)
_drovector operator- (const _drovector &)
_drovector operator+ (const _drovector &, const drovector &)
_drovector operator+ (const _drovector &, const _drovector &)
_drovector operator- (const _drovector &, const drovector &)
_drovector operator- (const _drovector &, const _drovector &)
double operator* (const _drovector &, const dcovector &)
double operator* (const _drovector &, const _dcovector &)
_drovector operator* (const _drovector &, const dgematrix &)
_drovector operator* (const _drovector &, const _dgematrix &)
_drovector operator* (const _drovector &, const dsymatrix &)
_drovector operator* (const _drovector &, const _dsymatrix &)
_drovector operator* (const _drovector &, const dgbmatrix &)
_drovector operator* (const _drovector &, const _dgbmatrix &)
_drovector operator* (const _drovector &, const dgsmatrix &)
_drovector operator* (const _drovector &, const _dgsmatrix &)
_drovector operator* (const _drovector &, const dssmatrix &)
_drovector operator* (const _drovector &, const _dssmatrix &)
_drovector operator* (const _drovector &, const double &)
_drovector operator/ (const _drovector &, const double &)
double operator% (const _drovector &, const drovector &)
double operator% (const _drovector &, const _drovector &)
_drovector operator* (const double &, const _drovector &)

Detailed Description

(DO NOT USE) Smart-temporary Real Double-precision Row Vector Class

Definition at line 3 of file _drovector.hpp.


Constructor & Destructor Documentation

_drovector::_drovector ( ) [inline]

drovector constructor

Definition at line 3 of file _drovector-constructor.hpp.

References array, cap, and l.

{VERBOSE_REPORT;
  l =0;
  cap =0;
  array =NULL;
}
_drovector::_drovector ( const _drovector vec) [inline]

_drovector copy constructor

Definition at line 12 of file _drovector-constructor.hpp.

References array, cap, l, and nullify().

{VERBOSE_REPORT;
  l =vec.l;
  cap =vec.cap;
  array =vec.array;
  
  vec.nullify();
}

_drovector destructor

Definition at line 27 of file _drovector-constructor.hpp.

References array.

{VERBOSE_REPORT;
  delete[] array; 
}

Member Function Documentation

cast to _zrovector

Definition at line 3 of file _drovector-cast.hpp.

References _(), zrovector::array, array, destroy(), i(), and l.

{VERBOSE_REPORT;
  zrovector newvec(l);
  
  for(long i=0; i<l; i++){
    newvec.array[i] =comple(array[i], 0.);
  }
  
  destroy();
  return _(newvec);
}
double & _drovector::operator() ( const long &  i) const [inline]

operator() for const object

Definition at line 3 of file _drovector-io.hpp.

References array, i(), and l.

Referenced by write().

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if( i<0 || l<=i ){
    ERROR_REPORT;
    std::cerr << "The required component is out of the vector size." << std::endl
              << "Your input was (" << i << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  return array[i];
}
void _drovector::write ( const char *  filename) const [inline]

Definition at line 36 of file _drovector-io.hpp.

References destroy(), i(), l, and operator()().

{VERBOSE_REPORT;
  std::ofstream ofs(filename, std::ios::trunc);
  ofs.setf(std::cout.flags());
  ofs.precision(std::cout.precision());
  ofs.width(std::cout.width());
  ofs.fill(std::cout.fill());
  
  ofs << "#drovector" << " " << l << std::endl;
  for(long i=0; i<l; i++){
    ofs << operator()(i) << " ";
  }
  ofs << std::endl;
  
  ofs.close();
  destroy();
}
void _drovector::nullify ( ) const [inline]

nullify all the vector data

Definition at line 3 of file _drovector-misc.hpp.

References array, cap, and l.

Referenced by _drovector(), drovector::drovector(), drovector::shallow_copy(), and t().

{VERBOSE_REPORT;
  l=0;
  cap=0;
  array=NULL;
}
void _drovector::destroy ( ) const [inline]

destroy all the vector data

Definition at line 12 of file _drovector-misc.hpp.

References array.

Referenced by damax(), idamax(), nrm2(), operator%(), operator*(), operator+(), drovector::operator+=(), operator-(), drovector::operator-=(), operator<<(), to_zrovector(), and write().

{VERBOSE_REPORT;
  delete [] array;
  array=NULL;
}

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  s,
const _drovector vec 
) [friend]

Definition at line 22 of file _drovector-io.hpp.

{VERBOSE_REPORT;
  for(long i=0; i<vec.l; i++){ s << " " << vec.array[i]; }
  s << std::endl;
  
  vec.destroy();
  return s;
}
_dcovector t ( const drovector rovec) [friend]

return a transposed column vector

Definition at line 3 of file drovector-calc.hpp.

{VERBOSE_REPORT;
  dcovector covec(rovec.l);
  dcopy_(rovec.l, rovec.array, 1, covec.array, 1);
  
  return _(covec);
}
double nrm2 ( const drovector vec) [friend]

return its Euclidean norm

Definition at line 13 of file drovector-calc.hpp.

{VERBOSE_REPORT;
  return dnrm2_(vec.l, vec.array, 1);
}
long idamax ( const drovector vec) [friend]

return the index of element having the largest absolute value in 0-based numbering system

Definition at line 21 of file drovector-calc.hpp.

{VERBOSE_REPORT;
  return idamax_(vec.l, vec.array, 1) -1;
}
double damax ( const drovector vec) [friend]

return its largest absolute value

Definition at line 28 of file drovector-calc.hpp.

{VERBOSE_REPORT;
  return vec.array[idamax_(vec.l, vec.array, 1) -1];
}
const _drovector& operator+ ( const _drovector vec) [friend]

+_drovector operator

Definition at line 3 of file _drovector-unary.hpp.

{VERBOSE_REPORT;
  return vec;
}
_drovector operator- ( const _drovector vec) [friend]

-_drovector operator

Definition at line 10 of file _drovector-unary.hpp.

{VERBOSE_REPORT;
  for(long i=0; i<vec.l; i++){
    vec.array[i] =-vec.array[i];
  }
  return vec;
}
_drovector operator+ ( const _drovector vecA,
const drovector vecB 
) [friend]

_drovector+drovector operator

Definition at line 3 of file _drovector-drovector.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vecA.l!=vecB.l){
    ERROR_REPORT;
    std::cerr << "These two vectors can not make a sumation." << std::endl
              << "Your input was (" << vecA.l << ") + (" << vecB.l << ")." << std::endl;
    exit(1);
  }
  
#endif//CPPL_DEBUG
  
  for(long i=0; i<vecA.l; i++){ vecA.array[i]+=vecB.array[i]; }
  
  return vecA;
}
_drovector operator+ ( const _drovector vecA,
const _drovector vecB 
) [friend]

_drovector+_drovector operator

Definition at line 3 of file _drovector-_drovector.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vecA.l!=vecB.l){
    ERROR_REPORT;
    std::cerr << "These two vectors can not make a sumation." << std::endl
              << "Your input was (" << vecA.l << ") + (" << vecB.l << ")." << std::endl;
    exit(1);
  }
  
#endif//CPPL_DEBUG
  
  for(long i=0; i<vecA.l; i++){ vecA.array[i]+=vecB.array[i]; }
  
  vecB.destroy();
  return vecA;
}
_drovector operator- ( const _drovector vecA,
const drovector vecB 
) [friend]

drovector-drovector operator

Definition at line 22 of file _drovector-drovector.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vecA.l!=vecB.l){
    ERROR_REPORT;
    std::cerr << "These two vectors can not make a subtraction." << std::endl
              << "Your input was (" << vecA.l << ") - (" << vecB.l << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  for(long i=0; i<vecA.l; i++){ vecA.array[i]-=vecB.array[i]; }
  
  return vecA;
}
_drovector operator- ( const _drovector vecA,
const _drovector vecB 
) [friend]

_drovector-_drovector operator

Definition at line 23 of file _drovector-_drovector.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vecA.l!=vecB.l){
    ERROR_REPORT;
    std::cerr << "These two vectors can not make a subtraction." << std::endl
              << "Your input was (" << vecA.l << ") - (" << vecB.l << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  for(long i=0; i<vecA.l; i++){ vecA.array[i]-=vecB.array[i]; }
  
  vecB.destroy();
  return vecA;
}
double operator* ( const _drovector rovec,
const dcovector covec 
) [friend]

_drovector*dcovector operator

Definition at line 3 of file _drovector-dcovector.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(rovec.l!=covec.l){
    ERROR_REPORT;
    std::cerr << "These two vectors can not make a product." << std::endl
              << "Your input was (" << rovec.l << ") * (" << covec.l << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  double val( ddot_( rovec.l, rovec.array, 1, covec.array, 1 ) );
  
  rovec.destroy();
  return val;
}
double operator* ( const _drovector rovec,
const _dcovector covec 
) [friend]

_drovector*_dcovector operator

Definition at line 3 of file _drovector-_dcovector.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(rovec.l!=covec.l){
    ERROR_REPORT;
    std::cerr << "These two vectors can not make a product." << std::endl
              << "Your input was (" << rovec.l << ") * (" << covec.l << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  double val( ddot_( rovec.l, rovec.array, 1, covec.array, 1 ) );
  
  rovec.destroy();
  covec.destroy();
  return val;
}
_drovector operator* ( const _drovector vec,
const dgematrix mat 
) [friend]

_drovector*dgematrix operator

Definition at line 3 of file _drovector-dgematrix.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vec.l!=mat.m){
    ERROR_REPORT;
    std::cerr << "These vector and matrix can not make a product." << std::endl
              << "Your input was (" << vec.l << ") * (" << mat.m << "x" << mat.n << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  drovector newvec(mat.n);
  
  dgemv_( 'T', mat.m, mat.n, 1.0, mat.array, mat.m, vec.array, 1, 0.0, newvec.array, 1 );
  
  vec.destroy();
  return _(newvec);
}
_drovector operator* ( const _drovector vec,
const _dgematrix mat 
) [friend]

_drovector*_dgematrix operator

Definition at line 3 of file _drovector-_dgematrix.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vec.l!=mat.m){
    ERROR_REPORT;
    std::cerr << "These vector and matrix can not make a product." << std::endl
              << "Your input was (" << vec.l << ") * (" << mat.m << "x" << mat.n << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  drovector newvec(mat.n);
  
  dgemv_( 'T', mat.m, mat.n, 1.0, mat.array, mat.m, vec.array, 1, 0.0, newvec.array, 1 );
  
  vec.destroy();
  mat.destroy();
  return _(newvec);
}
_drovector operator* ( const _drovector vec,
const dsymatrix mat 
) [friend]

_drovector*dsymatrix operator

Definition at line 3 of file _drovector-dsymatrix.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vec.l!=mat.n){
    ERROR_REPORT;
    std::cerr << "These vector and matrix can not make a product." << std::endl
              << "Your input was (" << vec.l << ") * (" << mat.n << "x" << mat.n << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  drovector newvec(mat.n);
  dsymv_( 'l', mat.n, 1.0, mat.array, mat.n,
          vec.array, 1, 0.0, newvec.array, 1 );

  vec.destroy();
  return _(newvec);
}
_drovector operator* ( const _drovector vec,
const _dsymatrix mat 
) [friend]

_drovector*_dsymatrix operator

Definition at line 3 of file _drovector-_dsymatrix.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vec.l!=mat.n){
    ERROR_REPORT;
    std::cerr << "These vector and matrix can not make a product." << std::endl
              << "Your input was (" << vec.l << ") * (" << mat.n << "x" << mat.n << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  drovector newvec(mat.n);
  
  dsymv_( 'l', mat.n, 1.0, mat.array, mat.n, vec.array, 1, 0.0, newvec.array, 1 );
  
  vec.destroy();
  mat.destroy();
  return _(newvec);
}
_drovector operator* ( const _drovector vec,
const dgbmatrix mat 
) [friend]

_drovector*dgbmatrix operator

Definition at line 3 of file _drovector-dgbmatrix.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vec.l!=mat.m){
    ERROR_REPORT;
    std::cerr << "These vector and matrix can not make a product." << std::endl
              << "Your input was (" << vec.l << ") * (" << mat.m << "x" << mat.n << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  drovector newvec(mat.n);
  
  dgbmv_( 'T', mat.m, mat.n, mat.kl, mat.ku, 1.0, mat.array, mat.kl+mat.ku+1, vec.array, 1, 0.0, newvec.array, 1 );
  
  vec.destroy();
  return _(newvec);
}
_drovector operator* ( const _drovector vec,
const _dgbmatrix mat 
) [friend]

_drovector*_dgbmatrix operator

Definition at line 3 of file _drovector-_dgbmatrix.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vec.l!=mat.m){
    ERROR_REPORT;
    std::cerr << "These vector and matrix can not make a product." << std::endl
              << "Your input was (" << vec.l << ") * (" << mat.m << "x" << mat.n << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  drovector newvec(mat.n);
  
  dgbmv_( 'T', mat.m, mat.n, mat.kl, mat.ku, 1.0, mat.array, mat.kl+mat.ku+1, vec.array, 1, 0.0, newvec.array, 1 );
  
  vec.destroy();
  mat.destroy();
  return _(newvec);
}
_drovector operator* ( const _drovector vec,
const dgsmatrix mat 
) [friend]

_drovector*dgsmatrix operator

Definition at line 3 of file _drovector-dgsmatrix.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vec.l!=mat.m){
    ERROR_REPORT;
    std::cerr << "These vector and matrix can not make a product." << std::endl
              << "Your input was (" << vec.l << ") * (" << mat.m << "x" << mat.n << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  drovector newvec(mat.n);
  newvec.zero();
  
  for(std::vector<dcomponent>::const_iterator it=mat.data.begin(); it!=mat.data.end(); it++){
    newvec(it->j) += vec(it->i)*it->v;
  }
  
  vec.destroy();
  return _(newvec);
}
_drovector operator* ( const _drovector vec,
const _dgsmatrix mat 
) [friend]

_drovector*_dgsmatrix operator

Definition at line 3 of file _drovector-_dgsmatrix.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vec.l!=mat.m){
    ERROR_REPORT;
    std::cerr << "These vector and matrix can not make a product." << std::endl
              << "Your input was (" << vec.l << ") * (" << mat.m << "x" << mat.n << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  drovector newvec(mat.n);
  newvec.zero();
  
  for(std::vector<dcomponent>::const_iterator it=mat.data.begin(); it!=mat.data.end(); it++){
    newvec(it->j) += vec(it->i)*it->v;
  }
  
  vec.destroy();
  mat.destroy();
  return _(newvec);
}
_drovector operator* ( const _drovector vec,
const dssmatrix mat 
) [friend]

_drovector*dssmatrix operator

Definition at line 3 of file _drovector-dssmatrix.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vec.l!=mat.n){
    ERROR_REPORT;
    std::cerr << "These vector and matrix can not make a product." << std::endl
              << "Your input was (" << vec.l << ") * (" << mat.n << "x" << mat.n << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  drovector newvec(mat.n);
  newvec.zero();
  
  for(std::vector<dcomponent>::const_iterator it=mat.data.begin(); it!=mat.data.end(); it++){
    newvec(it->j) +=vec(it->i)*it->v;
    if(it->i!=it->j){
      newvec(it->i) +=vec(it->j)*it->v;
    }
  }
  
  vec.destroy();
  return _(newvec);
}
_drovector operator* ( const _drovector vec,
const _dssmatrix mat 
) [friend]

_drovector*_dssmatrix operator

Definition at line 3 of file _drovector-_dssmatrix.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vec.l!=mat.n){
    ERROR_REPORT;
    std::cerr << "These vector and matrix can not make a product." << std::endl
              << "Your input was (" << vec.l << ") * (" << mat.n << "x" << mat.n << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  drovector newvec(mat.n);
  newvec.zero();
  
  for(std::vector<dcomponent>::const_iterator it=mat.data.begin(); it!=mat.data.end(); it++){
    newvec(it->j) +=vec(it->i)*it->v;
    if(it->i!=it->j){
      newvec(it->i) +=vec(it->j)*it->v;
    }
  }
  
  vec.destroy();
  mat.destroy();
  return _(newvec);
}
_drovector operator* ( const _drovector vec,
const double &  d 
) [friend]

_drovector*double operator

Definition at line 3 of file _drovector-double.hpp.

{VERBOSE_REPORT;
  dscal_(vec.l, d, vec.array, 1);
  return vec;
}
_drovector operator/ ( const _drovector vec,
const double &  d 
) [friend]

_drovector/double operator

Definition at line 11 of file _drovector-double.hpp.

{VERBOSE_REPORT;
  dscal_(vec.l, 1./d, vec.array, 1);
  return vec;
}
double operator% ( const _drovector vecA,
const drovector vecB 
) [friend]

drovector^T*drovector operator (inner product)

Definition at line 40 of file _drovector-drovector.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vecA.l!=vecB.l){
    ERROR_REPORT;
    std::cerr << "These two vectors can not make a dot product." << std::endl
              << "Your input was (" << vecA.l << ") % (" << vecB.l << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  double val( ddot_( vecA.l, vecA.array, 1, vecB.array, 1 ) );
  
  vecA.destroy();
  return val;
}
double operator% ( const _drovector vecA,
const _drovector vecB 
) [friend]

_drovector^T*_drovector operator (inner product)

Definition at line 42 of file _drovector-_drovector.hpp.

{VERBOSE_REPORT;
#ifdef  CPPL_DEBUG
  if(vecA.l!=vecB.l){
    ERROR_REPORT;
    std::cerr << "These two vectors can not make a dot product." << std::endl
              << "Your input was (" << vecA.l << ") % (" << vecB.l << ")." << std::endl;
    exit(1);
  }
#endif//CPPL_DEBUG
  
  double val( ddot_( vecA.l, vecA.array, 1, vecB.array, 1 ) );
  
  vecA.destroy();
  vecB.destroy();
  return val;
}
_drovector operator* ( const double &  d,
const _drovector vec 
) [friend]

double*_drovector operator

Definition at line 3 of file double-_drovector.hpp.

{VERBOSE_REPORT;
  dscal_(vec.l, d, vec.array, 1);  
  return vec;
}

Member Data Documentation

long _drovector::l [mutable]
long _drovector::cap [mutable]

vector capacity

Definition at line 10 of file _drovector.hpp.

Referenced by _(), _drovector(), drovector::drovector(), nullify(), drovector::shallow_copy(), and t().

double* _drovector::array [mutable]

The documentation for this class was generated from the following files:
 All Classes Files Functions Variables Friends