Changeset 17765 for trunk/Mars/mbase
- Timestamp:
- 05/02/14 16:19:33 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Mars/mbase/MArrayF.h
r17682 r17765 170 170 171 171 template<class T> 172 void Add(T *src, Int_t n, Int_t p=0, Float_t m=1.) 173 { 174 // under these 3 conditions, we return immediately, because they either make no sense, 175 // or result in an invariant array. 176 if (p >= fN) 177 { 178 // maybe throw a warning, because p >= fN makes no sense at all 179 return; 180 } 181 if ( n <= 0) 182 { 183 return; 184 } 185 if (m == 0.) 186 { 187 return; 188 } 189 if (src == NULL) 190 { 191 return; 192 } 193 194 Float_t *dest = fArray + p; 195 Float_t *end = dest; 196 if (n < fN-p) 197 { 198 end += n; 199 } 200 else 201 { 202 end += fN-p; 203 } 172 void Add(const T *src, UInt_t n, UInt_t beg=0, Float_t scale=1) 173 { 174 if (!src || beg >= fN) 175 return; 176 177 Float_t *ptr = fArray+beg; 178 const Float_t *end = beg+n>fN ? fArray+fN : ptr+n; 204 179 205 180 // we treat the case m==1. special, in order to speed up the code a bit 206 181 // since when m==1. the multiplication can be omitted and this should be a bit faster then. 207 if ( m == 1.)208 { 209 while ( dest<end)210 * dest++ += *src++;182 if (scale==1) 183 { 184 while (ptr<end) 185 *ptr++ += *src++; 211 186 } 212 187 else 213 188 { 214 while ( dest<end)215 * dest++ += (*src++) * m;189 while (ptr<end) 190 *ptr++ += (*src++) * m; 216 191 } 217 192 } 218 193 219 194 template<class T> 220 void AddClipped(Double_t th, T src, Int_t n, Int_t p=0) 221 { 222 Float_t *dest = fArray + p; 223 Float_t *end = dest + n; 224 225 while (dest<end) 226 *dest++ += TMath::Min(*src++, th); 195 void AddClipped(Double_t th, const T *src, UInt_t n, UInt_t beg=0) 196 { 197 if (!src || beg>=fN) 198 return; 199 200 Float_t *ptr = fArray + beg; 201 const Float_t *end = beg+n>fN ? fArray+fN : ptr+n; 202 203 while (ptr<end) 204 *ptr++ += TMath::Min(*src++, th); 227 205 } 228 206
Note:
See TracChangeset
for help on using the changeset viewer.