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