ROOT  6.06/09
Reference Guide
TArrayF.cxx
Go to the documentation of this file.
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 /** \class TArrayF
13 Array of floats (32 bits per element).
14 */
15 
16 #include "TArrayF.h"
17 #include "TBuffer.h"
18 
19 
21 
22 ////////////////////////////////////////////////////////////////////////////////
23 /// Default TArrayF ctor.
24 
26 {
27  fArray = 0;
28 }
29 
30 ////////////////////////////////////////////////////////////////////////////////
31 /// Create TArrayF object and set array size to n floats.
32 
34 {
35  fArray = 0;
36  if (n > 0) Set(n);
37 }
38 
39 ////////////////////////////////////////////////////////////////////////////////
40 /// Create TArrayF object and initialize it with values of array.
41 
42 TArrayF::TArrayF(Int_t n, const Float_t *array)
43 {
44  fArray = 0;
45  Set(n, array);
46 }
47 
48 ////////////////////////////////////////////////////////////////////////////////
49 /// Copy constructor.
50 
51 TArrayF::TArrayF(const TArrayF &array) : TArray(array)
52 {
53  fArray = 0;
54  Set(array.fN, array.fArray);
55 }
56 
57 ////////////////////////////////////////////////////////////////////////////////
58 /// TArrayF assignment operator.
59 
61 {
62  if (this != &rhs)
63  Set(rhs.fN, rhs.fArray);
64  return *this;
65 }
66 
67 ////////////////////////////////////////////////////////////////////////////////
68 /// Delete TArrayF object.
69 
71 {
72  delete [] fArray;
73  fArray = 0;
74 }
75 
76 ////////////////////////////////////////////////////////////////////////////////
77 /// Adopt array arr into TArrayF, i.e. don't copy arr but use it directly
78 /// in TArrayF. User may not delete arr, TArrayF dtor will do it.
79 
81 {
82  if (fArray)
83  delete [] fArray;
84 
85  fN = n;
86  fArray = arr;
87 }
88 
89 ////////////////////////////////////////////////////////////////////////////////
90 /// Add float c at position i. Check for out of bounds.
91 
93 {
94  if (!BoundsOk("TArrayF::AddAt", i)) return;
95  fArray[i] = c;
96 }
97 
98 ////////////////////////////////////////////////////////////////////////////////
99 /// Set size of this array to n floats.
100 /// A new array is created, the old contents copied to the new array,
101 /// then the old array is deleted.
102 /// This function should not be called if the array was declared via Adopt.
103 
105 {
106  if (n < 0) return;
107  if (n != fN) {
108  Float_t *temp = fArray;
109  if (n != 0) {
110  fArray = new Float_t[n];
111  if (n < fN) memcpy(fArray,temp, n*sizeof(Float_t));
112  else {
113  memcpy(fArray,temp,fN*sizeof(Float_t));
114  memset(&fArray[fN],0,(n-fN)*sizeof(Float_t));
115  }
116  } else {
117  fArray = 0;
118  }
119  if (fN) delete [] temp;
120  fN = n;
121  }
122 }
123 
124 ////////////////////////////////////////////////////////////////////////////////
125 /// Set size of this array to n floats and set the contents.
126 /// This function should not be called if the array was declared via Adopt.
127 
128 void TArrayF::Set(Int_t n, const Float_t *array)
129 {
130  if (fArray && fN != n) {
131  delete [] fArray;
132  fArray = 0;
133  }
134  fN = n;
135  if (fN == 0) return;
136  if (array == 0) return;
137  if (!fArray) fArray = new Float_t[fN];
138  memmove(fArray, array, n*sizeof(Float_t));
139 }
140 
141 ////////////////////////////////////////////////////////////////////////////////
142 /// Stream a TArrayF object.
143 
144 void TArrayF::Streamer(TBuffer &b)
145 {
146  if (b.IsReading()) {
147  Int_t n;
148  b >> n;
149  Set(n);
150  b.ReadFastArray(fArray,n);
151  } else {
152  b << fN;
153  b.WriteFastArray(fArray, fN);
154  }
155 }
156 
Abstract array base class.
Definition: TArray.h:33
Float_t * fArray
Definition: TArrayF.h:32
void AddAt(Float_t c, Int_t i)
Add float c at position i. Check for out of bounds.
Definition: TArrayF.cxx:92
Bool_t IsReading() const
Definition: TBuffer.h:81
float Float_t
Definition: RtypesCore.h:53
void Adopt(Int_t n, Float_t *array)
Adopt array arr into TArrayF, i.e.
Definition: TArrayF.cxx:80
ClassImp(TArrayF) TArrayF
Default TArrayF ctor.
Definition: TArrayF.cxx:20
Buffer base class used for serializing objects.
Definition: TBuffer.h:40
Array of floats (32 bits per element).
Definition: TArrayF.h:29
int Int_t
Definition: RtypesCore.h:41
virtual ~TArrayF()
Delete TArrayF object.
Definition: TArrayF.cxx:70
TArrayF & operator=(const TArrayF &rhs)
TArrayF assignment operator.
Definition: TArrayF.cxx:60
Int_t fN
Definition: TArray.h:40
Bool_t BoundsOk(const char *where, Int_t at) const
Definition: TArray.h:79
virtual void ReadFastArray(Bool_t *b, Int_t n)=0
virtual void WriteFastArray(const Bool_t *b, Int_t n)=0
void Set(Int_t n)
Set size of this array to n floats.
Definition: TArrayF.cxx:104
const Int_t n
Definition: legend1.C:16