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