Hi Georges, I agree with your comments and will implement your proposed changes in the TArray classes. Rene Brun On Tue, 21 Dec 1999, George Heintzelman wrote: > > It seems that using TArray*::Set(Int_t n), while being able to grow or > shrink the array, also wipes out any data in the previous array (but > only if n is >= 0 and not equal to the previous value). This seems > crazy; if I wanted a new, blank array, I would just create it myself. > Keeping the old data allows one to easily use TArray's which can grow > at need. > > Currently the code is: > > void TArrayF::Set(Int_t n) > { > // Set array size of TArrayF object to n floats. > // If n<0 leave array unchanged. > > if (n < 0) return; > if (fArray && fN != n) { > delete [] fArray; > fArray = 0; > } > fN = n; > if (fN == 0) return; > if (!fArray) fArray = new Float_t[fN]; > for (Int_t i = 0; i < fN; i++) > fArray[i] = 0; > } > > I propose instead that this code should be: > > void TArrayF::Set(Int_t n) > { > // Set array size of TArrayF object to n floats. > // If n<0 leave array unchanged. > > if (n < 0) return; > if (n != fN) { > Float_t *temp = fArray; > if (n != 0) { > fArray = new Float_t[n]; > memcpy(fArray,temp,min(n,fN)*sizeof(Float_t)); > } else { > fArray = 0; > } > fN = n; > delete [] temp; > } > } > > George Heintzelman > gah@bnl.gov > > > > >
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:44 MET