1    	// @(#)root/cont:$Id$
2    	// Author: Rene Brun   06/03/95
3    	
4    	/*************************************************************************
5    	 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
6    	 * All rights reserved.                                                  *
7    	 *                                                                       *
8    	 * For the licensing terms see $ROOTSYS/LICENSE.                         *
9    	 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
10   	 *************************************************************************/
11   	
12   	#ifndef ROOT_TArrayF
13   	#define ROOT_TArrayF
14   	
15   	
16   	//////////////////////////////////////////////////////////////////////////
17   	//                                                                      //
18   	// TArrayF                                                              //
19   	//                                                                      //
20   	// Array of floats (32 bits per element).                               //
21   	//                                                                      //
22   	//////////////////////////////////////////////////////////////////////////
23   	
24   	#ifndef ROOT_TArray
25   	#include "TArray.h"
26   	#endif
27   	
28   	
29   	class TArrayF : public TArray {
30   	
31   	public:
32   	   Float_t    *fArray;       //[fN] Array of fN floats
33   	
34   	   TArrayF();
35   	   TArrayF(Int_t n);
36   	   TArrayF(Int_t n, const Float_t *array);
37   	   TArrayF(const TArrayF &array);
38   	   TArrayF    &operator=(const TArrayF &rhs);
39   	   virtual    ~TArrayF();
40   	
41   	   void           Adopt(Int_t n, Float_t *array);
42   	   void           AddAt(Float_t c, Int_t i);
43   	   Float_t        At(Int_t i) const ;
44   	   void           Copy(TArrayF &array) const {array.Set(fN,fArray);}
45   	   const Float_t *GetArray() const { return fArray; }
46   	   Float_t       *GetArray() { return fArray; }
47   	   Double_t       GetAt(Int_t i) const { return At(i); }
48   	   Stat_t         GetSum() const {Stat_t sum=0; for (Int_t i=0;i<fN;i++) sum+=fArray[i]; return sum;}
49   	   void           Reset()             {memset(fArray,  0, fN*sizeof(Float_t));}
50   	   void           Reset(Float_t val)  {for (Int_t i=0;i<fN;i++) fArray[i] = val;}
51   	   void           Set(Int_t n);
52   	   void           Set(Int_t n, const Float_t *array);
53   	   void           SetAt(Double_t v, Int_t i) { AddAt((Float_t)v, i); }
54   	   Float_t       &operator[](Int_t i);
55   	   Float_t        operator[](Int_t i) const;
56   	
57   	   ClassDef(TArrayF,1)  //Array of floats
58   	};
59   	
60   	#if defined R__TEMPLATE_OVERLOAD_BUG
61   	template <>
62   	#endif
63   	inline TBuffer &operator>>(TBuffer &buf, TArrayF *&obj)
64   	{
65   	   // Read TArrayF object from buffer.
66   	
67   	   obj = (TArrayF *) TArray::ReadArray(buf, TArrayF::Class());
68   	   return buf;
69   	}
70   	
71   	#if defined R__TEMPLATE_OVERLOAD_BUG
72   	template <>
73   	#endif
74   	inline TBuffer &operator<<(TBuffer &buf, const TArrayF *obj)
75   	{
76   	   // Write a TArrayF object into buffer
77   	   return buf << (const TArray*)obj;
78   	}
79   	
80   	inline Float_t TArrayF::At(Int_t i) const
81   	{
82   	   if (!BoundsOk("TArrayF::At", i)) return 0;
83   	   return fArray[i];
84   	}
85   	
86   	inline Float_t &TArrayF::operator[](Int_t i)
87   	{
88   	   if (!BoundsOk("TArrayF::operator[]", i))
89   	      i = 0;
90   	   return fArray[i];
91   	}
92   	
93   	inline Float_t TArrayF::operator[](Int_t i) const
94   	{
95   	   if (!BoundsOk("TArrayF::operator[]", i)) return 0;
96   	   return fArray[i];
97   	}
98   	
99   	#endif
100