colvec_pf.cpp
上传用户:jtjnyq9001
上传日期:2014-11-21
资源大小:3974k
文件大小:4k
源码类别:

3G开发

开发平台:

Visual C++

  1. //
  2. //  File = colvec_pf.cpp
  3. //
  4. #include "colvec_pf.h"
  5. #include "rowvec_pf.h"
  6. #include "matrix_pf.h"
  7. #include "pfelem.h"
  8. #ifdef _DEBUG
  9.   #include <fstream>
  10.   //#define _VEC_DEBUG 1
  11.   extern ofstream DebugFile;
  12. #endif
  13. //------------------------------------------------
  14. // transpose operator
  15. rowvec_pf& colvec_pf::operator!( void )
  16. {
  17.   //rowvec<T> *rv = new rowvec<T>(pV->orig_indx,pV->length);
  18.   rowvec_pf *rv = new rowvec_pf();
  19.   #ifdef _VEC_DEBUG
  20.     DebugFile << "ncv::op!(): new rowvec at " 
  21.               << (void*)rv << endl;
  22.     DebugFile << "ncv::op!(): hook vrep "
  23.               << (void*)pV << " to rowvec " 
  24.               << (void*)rv << endl;
  25.   #endif
  26.   rv->pV = pV;
  27.   *(rv->pV)=*pV;
  28.   ((rv->pV)->refcnt)++;
  29.   rv->Is_Temp = 1;
  30.   if(Is_Temp)
  31.     {
  32.     #ifdef _VEC_DEBUG
  33.       DebugFile << "ncv::op!(): deleting colvec at " 
  34.                 << (void*)this << endl;
  35.     #endif
  36.     delete this;
  37.     }
  38.   return(*rv);
  39. }
  40. //------------------------------------------
  41. //  constructor for column vector
  42. colvec_pf::colvec_pf( void )
  43.           :vector_pf()
  44.   {
  45.   #ifdef _VEC_DEBUG
  46.     DebugFile << "nshallow ctor for colvec at " << (void*)this 
  47.               << endl;
  48.   #endif
  49.   //pV->is_row_vec = 0;
  50.   }
  51. //------------------------------------------
  52. //  constructor for column vector
  53. colvec_pf::colvec_pf(int origin, int size)
  54.           :vector_pf(origin, size)
  55.   {
  56.   #ifdef _VEC_DEBUG
  57.     DebugFile << "nctor for colvec at " << (void*)this 
  58.               << "  (vrep = " << (void*)pV << ")" << endl;
  59.   #endif
  60.   }
  61. //---------------------------------------------------
  62. //  method to multiply column vector times row vector
  63. matrix_pf& colvec_pf::operator*( rowvec_pf &v2)
  64.   {
  65.   // get origin and length of column vector
  66.   int v1_orig = pV->orig_indx;
  67.   int v1_len = pV->length;
  68.   // get origin and length of row vector
  69.   int v2_orig = v2.pV->orig_indx;
  70.   int v2_len = v2.pV->length;
  71.   // allocate matrix for result
  72.   matrix_pf *m_res = 
  73.                  new matrix_pf(v1_orig,v1_len,v2_orig,v2_len);
  74.   m_res->Is_Temp = 1;
  75.   #ifdef _VEC_DEBUG
  76.     DebugFile << "ncv::op*(rv): new matrix at " 
  77.               << (void*)m_res << endl;
  78.   #endif
  79.   for(int row=0; row<v1_len; row++)
  80.     {
  81.     for(int col=0; col<v2_len; col++)
  82.       {
  83.       ((((m_res->pM)->f[row])->pV)->f[col]) = 
  84.                                 (pV->f[row]) * (v2.pV->f[col]);
  85.       }
  86.     }
  87.   if(v2.Is_Temp)
  88.     {
  89.     #ifdef _VEC_DEBUG
  90.       DebugFile << "ncv::op*(rv): deleting rowvec at " 
  91.                 << (void*)(&v2) << endl;
  92.     #endif
  93.     delete (&v2);
  94.     }
  95.   if(Is_Temp)
  96.     {
  97.     #ifdef _VEC_DEBUG
  98.       DebugFile << "ncv::op*(rv): deleting colvec at " 
  99.                 << (void*)this << endl;
  100.     #endif
  101.     delete this;
  102.     }
  103.   return(*m_res);
  104.   };
  105. //-----------------------------------------
  106. // destructor
  107. colvec_pf::~colvec_pf()
  108.   {
  109.   #ifdef _VEC_DEBUG
  110.     DebugFile << "ndtor for colvec at " << (void*)this << endl;
  111.   #endif
  112.   //~vector();
  113.   };
  114. //----------------------------------------------
  115. // assignment x = y
  116. colvec_pf& colvec_pf::operator=(vector_pf &vec)
  117. {
  118.   vec.pV->refcnt++;
  119.   if(--pV->refcnt == 0)
  120.     {
  121.     #ifdef _VEC_DEBUG
  122.       DebugFile << "ncv::op=(v): deleting vrep at " 
  123.                 << (void*)pV << endl;
  124.     #endif
  125.     delete[] pV->f;
  126.     delete pV;
  127.     }
  128.   #ifdef _VEC_DEBUG
  129.     DebugFile << "ncv::op=(v): hook vrep "
  130.           << (void*)(vec.pV) << " to vector " 
  131.           << (void*)this << endl;
  132.   #endif
  133.   pV = vec.pV;
  134.   if(vec.Is_Temp)
  135.     {
  136.     #ifdef _VEC_DEBUG
  137.       DebugFile << "ncv::op=(v): deleting vector at " 
  138.                 << (void*)(&vec) << endl;
  139.     #endif
  140.     delete &vec;
  141.     }
  142.   return *this;
  143. }
  144. //---------------------------------