Changeset 0cb90aa in tol


Ignore:
Timestamp:
Dec 11, 2010, 7:39:05 PM (16 years ago)
Author:
Víctor de Buen <vdebuen@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
0e3f2d32
Parents:
7519264
Message:

Refs #1029
Handling dynamic memory in Matrix and Text
Text concatenation operators

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@2790 be4846ae-f051-483a-831f-b64e7d08527f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tol/stdlib/general/TolCint/tol_cint_casting.cpp

    r7519264 r0cb90aa  
    1717  int columns_;
    1818  double* buffer_;
     19  int deleteBuffer_;
    1920
    20   Matrix(int rows, int columns, double* buffer)
     21  Matrix(int rows, int columns, double* buffer, int deleteBuffer=0)
    2122  : rows_(rows),
    2223    columns_(columns),
    23     buffer_(buffer)
     24    buffer_(buffer),
     25    deleteBuffer_(deleteBuffer)
    2426  {}
    2527
    26  ~Matrix() {}
     28  Matrix(int rows, int columns)
     29  : rows_(0),
     30    columns_(0),
     31    buffer_(NULL),
     32    deleteBuffer_(false)
     33  {
     34    Alloc(rows. columns)
     35  }
     36
     37 ~Matrix()
     38  {
     39    Free();
     40  }
     41
     42  void Free()
     43  {
     44    if(deleteBuffer_ && buffer_) delete  [] buffer_;
     45    buffer_ = NULL;
     46    rows_ = 0;
     47    columns_ = 0;
     48    deleteBuffer_ = false;
     49  }
     50
     51  void Alloc(int rows, int columns)
     52  {
     53    Free();
     54    rows_ = rows;
     55    columns_ = columns;
     56    buffer_ = new double[rows*columns)
     57    deleteBuffer_ = true;
     58  }
    2759
    2860//Zero based vector access
    … …  
    5587  int length_;
    5688  char* buffer_;
     89  int deleteBuffer_;
    5790
    58   Text(int length, char* buffer)
     91  Text(int length, char* buffer, int deleteBuffer=0)
    5992  : length_(length),
    60     buffer_(buffer)
     93    buffer_(buffer),
     94    deleteBuffer_(deleteBuffer)
    6195  {}
    6296
    63  ~Text() {}
     97  Text(char* buffer)
     98  : length_(strlen(buffer)),
     99    buffer_(buffer),
     100    deleteBuffer_(0)
     101  {}
    64102
    65   double& operator() (int i) const
     103 ~Text()
     104  {
     105    Free();
     106  }
     107
     108  void Free()
     109  {
     110    if(deleteBuffer_ && buffer_) delete  [] buffer_;
     111    length_ = 0;
     112    buffer_ = NULL;
     113    deleteBuffer_ = false;
     114  }
     115
     116  void Alloc(int length)
     117  {
     118    Free();
     119    length_ = length;
     120    buffer_ = new char[length_+1)
     121    deleteBuffer_ = true;
     122  }
     123
     124//Zero based vector access
     125  double& operator[] (int i) const
    66126  {
    67127    return(buffer_[i]);
    68128  }
     129//One based vector access
     130  double& operator() (int i) const
     131  {
     132    return(buffer_[i-1]);
     133  }
     134//concat operations
     135  Text operator + (const Text& right)
     136  {
     137    int len = length_ + right.length_;
     138    char* buf = new char[len+1];
     139    sprintf(buf,"%s%s",buffer_,right.buffer);
     140    Text txt(len, buf, 1);
     141    return(txt);
     142  }
     143  Text operator + (const char* right)
     144  {
     145    int len = length_ + strlen(right);
     146    char* buf = new char[len+1];
     147    sprintf(buf,"%s%s",buffer_,right);
     148    Text txt(len, buf, 1);
     149    return(txt);
     150  }
     151  Text operator + (int num)
     152  {
     153    int len = length_ + 64;
     154    char* buf = new char[len+1];
     155    sprintf(buf,"%s%ld",buffer_,num);
     156    Text txt(len, buf, 1);
     157    return(txt);
     158  }
     159  Text operator + (double num)
     160  {
     161    int len = length_ + 64;
     162    char* buf = new char[len+1];
     163    sprintf(buf,"%s%.16lg",buffer_,n);
     164    Text txt(len, buf, 1);
     165    return(txt);
     166  }
    69167};
     168
     169
Note: See TracChangeset for help on using the changeset viewer.