#ifndef ROOT_TArrayD
#define ROOT_TArrayD

//+SEQ,CopyRight,T=NOINCLUDE.

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TArrayD                                                              //
//                                                                      //
// Array of doubles (64 bits per element).                              //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TArray
//*KEEP,TArray,T=C++.
#include "TArray.h"
//*KEND.
#endif


class TArrayD : public TArray {

public:
   Double_t    *fArray;       //Array of fN doubles

   TArrayD();
   TArrayD(Int_t n);
   TArrayD(Int_t n, Double_t *array);
   TArrayD(const TArrayD &array);
   TArrayD    &operator=(const TArrayD &rhs);
   virtual    ~TArrayD();

   void       Adopt(Int_t n, Double_t *array);
   void       AddAt(Double_t c, Int_t i);
   Double_t   At(Int_t i);
   void       Copy(TArrayD &array) {array.Set(fN); for (Int_t i=0;i<fN;i++) array.fArray[i] = fArray[i];}
   Double_t  *GetArray() const { return fArray; }
   Stat_t     GetSum() const {Stat_t sum=0; for (Int_t i=0;i<fN;i++) sum+=fArray[i]; return sum;}
   void       Reset() {for (Int_t i=0;i<fN;i++) fArray[i] = 0;}
   void       Set(Int_t n);
   void       Set(Int_t n, Double_t *array);
   Double_t  &operator[](Int_t i);

   ClassDef(TArrayD,1)  //Array of doubles
};

inline Double_t TArrayD::At(Int_t i)
{
   if (!BoundsOk("TArrayD::At", i))
      i = 0;
   return fArray[i];
}

inline Double_t &TArrayD::operator[](Int_t i)
{
   if (!BoundsOk("TArrayD::operator[]", i))
      i = 0;
   return fArray[i];
}

#endif