Changeset 2619 in Sophya


Ignore:
Timestamp:
Sep 15, 2004, 5:36:54 PM (21 years ago)
Author:
cmv
Message:

correc bug HistoErr::operator=() + remise en forme createur/destructeur Histos cmv 15/9/04

Location:
trunk/SophyaLib/HiStats
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/HiStats/histerr.cc

    r2615 r2619  
    4444HistoErr::~HistoErr(void)
    4545{
    46  if(mNData) {delete [] mNData; mNData=NULL;}
    47 }
     46 Delete();
     47}
     48
    4849/********* Methode *********/
    4950/*! Allocation du tableau mNData */
     
    5657
    5758/********* Methode *********/
     59/*! Delete des tableaux */
     60void HistoErr::Delete(void)
     61{
     62 Histo::Delete();
     63 if(mNData) {delete [] mNData; mNData=NULL;}
     64}
     65
     66/********* Methode *********/
    5867/*!
    5968  Remise a zero
     
    6170void HistoErr::Zero(void)
    6271{
    63  if(mNData != NULL) memset(mNData,0,mBins*sizeof(uint_4));
    6472 Histo::Zero();
     73 if(mNData) memset(mNData,0,mBins*sizeof(uint_4));
    6574}
    6675
     
    172181}
    173182
     183/********* Methode *********/
     184/*!
     185  Operateur egal HistoErr = HistoErr
     186*/
     187HistoErr& HistoErr::operator = (const HistoErr& h)
     188{
     189  if(this==&h) return *this;
     190  Delete();
     191  if(h.mBins<=0) return *this;
     192
     193  // Copy the "Histo" part
     194  (Histo)(*this) = Histo::operator=(h);
     195  // Copy the "entries by bin" table
     196  allocate_mNData(h.mBins);
     197  memcpy(mNData,h.mNData,mBins*sizeof(uint_4));
     198
     199  return *this;
     200}
     201
    174202///////////////////////////////////////////////////////////
    175203// --------------------------------------------------------
  • trunk/SophyaLib/HiStats/histerr.h

    r2608 r2619  
    4444  void ToCorrel(void);
    4545
     46  // Operators
     47  HistoErr& operator = (const HistoErr& h);
     48
    4649protected:
    4750  void allocate_mNData(int nbin);
     51  void Delete(void);
     52
    4853  uint_4* mNData;    //!< nombre d'entrees dans chaque bin
    4954};
  • trunk/SophyaLib/HiStats/histos.cc

    r2615 r2619  
    11//
    2 // $Id: histos.cc,v 1.18 2004-09-10 09:52:19 cmv Exp $
     2// $Id: histos.cc,v 1.19 2004-09-15 15:36:54 cmv Exp $
    33//
    44
     
    5757Histo::Histo(const Histo& H)
    5858: mData((H.mBins>0)? new r_8[H.mBins] : NULL),
    59   mErr2(NULL),
     59  mErr2((H.mBins>0 && H.mErr2!=NULL)? new r_8[H.mBins]: NULL),
    6060  mUnder(H.mUnder), mOver(H.mOver), nHist(H.nHist), nEntries(H.nEntries),
    6161  mBins(H.mBins), mMin(H.mMin), mMax(H.mMax),
    6262  binWidth(H.binWidth)
    6363{
    64   if(mBins>0) {
    65     memcpy(mData, H.mData, mBins*sizeof(r_8));
    66     if( H.mErr2 != NULL ) {
    67       mErr2 = new r_8[mBins];
    68       memcpy(mErr2, H.mErr2, mBins*sizeof(r_8));
    69     }
    70   }
     64  if(mBins<=0) return;
     65  memcpy(mData,H.mData,mBins*sizeof(r_8));
     66  if(H.mErr2) memcpy(mErr2, H.mErr2, mBins*sizeof(r_8));
    7167}
    7268
     
    9591void Histo::Zero()
    9692{
    97   if(mBins<=0) return;
    98   memset(mData, 0, mBins*sizeof(r_8));
     93  if(mBins<=0 || mData==NULL) return;
     94  memset(mData,0,mBins*sizeof(r_8));
    9995  mUnder = mOver = 0;
    10096  nHist = 0;
    10197  nEntries = 0;
    102   if( mErr2 != NULL ) memset(mErr2, 0, mBins*sizeof(r_8));
     98  if(mErr2) memset(mErr2, 0, mBins*sizeof(r_8));
    10399}
    104100
     
    111107 if(mBins<=0) return;
    112108 if(mErr2==NULL) mErr2 = new r_8[mBins];
    113  memset(mErr2, 0, mBins*sizeof(r_8));
     109 memset(mErr2,0,mBins*sizeof(r_8));
    114110}
    115111
     
    121117{
    122118  if(this == &h) return *this;
    123   if( h.mBins <= 0 ) {Delete(); return *this;}
    124   if( h.mBins > mBins ) Delete();
    125   if(!h.mErr2 && mErr2 ) { delete [] mErr2; mErr2=NULL;}
    126   if(!mData) mData = new r_8[h.mBins];
    127   if(h.mErr2 && !mErr2 ) mErr2 = new r_8[h.mBins];
    128 
     119  Delete();
     120  if(h.mBins<=0 || h.mData==NULL) return *this;
     121
     122  mData = new r_8[h.mBins];
     123  if(h.mErr2) mErr2 = new r_8[h.mBins];
    129124  mUnder = h.mUnder;
    130125  mOver = h.mOver;
     
    136131  binWidth = h.binWidth;
    137132 
    138   memcpy(mData, h.mData, mBins*sizeof(r_8));
    139   if(mErr2) memcpy(mErr2, h.mErr2, mBins*sizeof(r_8));
     133  memcpy(mData,h.mData,mBins*sizeof(r_8));
     134  if(mErr2) memcpy(mErr2,h.mErr2,mBins*sizeof(r_8));
    140135
    141136  return *this;
Note: See TracChangeset for help on using the changeset viewer.