[ROOT] Why _must_ array size by Int_t/UInt_t - why?

From: Christian Holm Christensen (cholm@hehi03.nbi.dk)
Date: Wed Jun 27 2001 - 11:23:39 MEST


Hi ROOT'ers, 

It seems that ROOT's I/O insist on the array size of pointer data
member to be an Int_t or UInt_t - why not a Short_t or UShor_t, or
even Long_t or ULong_t?  For example

  class Foo : public TObject  
  {
  private:
    UShort_t  fN;     // Array size <= doesn't work - why? 
    // Short_t   fN;     // Array size <= doesn't work - why? 
    // Int_t     fN;     // ROOT's I/O insists on an 'interger' - why? 
    // UInt_t    fN;     // ROOT's I/O insists on an 'interger' - why? 
    Short_t*  fArray; //[fN] Data Array
  public:
    Foo() : fN(0) { fArray = 0; }
    Foo(UShort_t n) : fN(n) { 
      fArray = new Short_t[fN];
      for (UShort_t i = 0; i < n ; i++) 
        fArray[i] = i;
    }
  
    void Print(Option_t* option="") const {       
      for (UShort_t i = 0; i < fN ; i++) 
        cout << " " << setw(3) << fArray[i] << flush; 
      cout << endl;
    }

    ClassDef(Foo, 1) // A Foo class
  };

It seems like a waste of 2 perfectly good bytes to insist on having a
(4 byte) Int_t/UInt_t when most often a (2 byte) Short_t/UShort_t
could do.   

This ROOT using 3.01/05. 

Yours, 

Christian  -----------------------------------------------------------
Holm Christensen                             Phone:  (+45) 35 35 96 91 
  Sankt Hansgade 23, 1. th.                  Office: (+45) 353  25 305 
  DK-2200 Copenhagen N                       Web:    www.nbi.dk/~cholm    
  Denmark                                    Email:       cholm@nbi.dk



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:50 MET