29 TLeafL::TLeafL(): TLeaf()
31 fLenType =
sizeof(Long64_t);
41 TLeafL::TLeafL(TBranch *parent,
const char *name,
const char *type)
42 :TLeaf(parent, name,type)
44 fLenType =
sizeof(Long64_t);
56 if (ResetAddress(0,kTRUE))
delete [] fValue;
62 void TLeafL::Export(TClonesArray *list, Int_t n)
64 Long64_t *value = fValue;
65 for (Int_t i=0;i<n;i++) {
66 char *first = (
char*)list->UncheckedAt(i);
67 Long64_t *ii = (Long64_t*)&first[fOffset];
68 for (Int_t j=0;j<fLen;j++) {
78 void TLeafL::FillBasket(TBuffer &b)
82 if (fPointer) fValue = *fPointer;
84 if (fValue[0] > fMaximum) fMaximum = fValue[0];
87 for (i=0;i<len;i++) b << (ULong64_t)fValue[i];
89 b.WriteFastArray(fValue,len);
96 const char *TLeafL::GetTypeName()
const
98 if (fIsUnsigned)
return "ULong64_t";
107 Double_t TLeafL::GetValue(Int_t i)
const
109 if (fIsUnsigned)
return (Double_t)((ULong64_t)fValue[i]);
118 LongDouble_t TLeafL::GetValueLongDouble(Int_t i)
const
120 if (fIsUnsigned)
return (LongDouble_t)((ULong64_t)fValue[i]);
127 Bool_t TLeafL::IncludeRange(TLeaf *input)
130 if (input->GetMaximum() > this->GetMaximum())
131 this->SetMaximum( input->GetMaximum() );
132 if (input->GetMinimum() < this->GetMinimum())
133 this->SetMinimum( input->GetMinimum() );
143 void TLeafL::Import(TClonesArray *list, Int_t n)
145 const Int_t kIntUndefined = -9999;
148 for (Int_t i=0;i<n;i++) {
149 clone = (
char*)list->UncheckedAt(i);
150 if (clone) memcpy(&fValue[j],clone + fOffset, 8*fLen);
151 else memcpy(&fValue[j],&kIntUndefined, 8*fLen);
159 void TLeafL::PrintValue(Int_t l)
const
162 ULong64_t *uvalue = (ULong64_t*)GetValuePointer();
163 printf(
"%llu",uvalue[l]);
165 Long64_t *value = (Long64_t*)GetValuePointer();
166 printf(
"%lld",value[l]);
173 void TLeafL::ReadBasket(TBuffer &b)
175 if (!fLeafCount && fNdata == 1) {
176 b.ReadLong64(fValue[0]);
179 Long64_t entry = fBranch->GetReadEntry();
180 if (fLeafCount->GetBranch()->GetReadEntry() != entry) {
181 fLeafCount->GetBranch()->GetEntry(entry);
183 Int_t len = Int_t(fLeafCount->GetValue());
184 if (len > fLeafCount->GetMaximum()) {
185 printf(
"ERROR leaf:%s, len=%d and max=%d\n",GetName(),len,fLeafCount->GetMaximum());
186 len = fLeafCount->GetMaximum();
189 b.ReadFastArray(fValue,len*fLen);
191 b.ReadFastArray(fValue,fLen);
198 bool TLeafL::ReadBasketFast(TBuffer& input_buf, Long64_t N)
200 if (R__unlikely(fLeafCount)) {
return false;}
201 return input_buf.ByteSwapBuffer(fLen*N, kLong64_t);
208 void TLeafL::ReadBasketExport(TBuffer &b, TClonesArray *list, Int_t n)
213 b.ReadFastArray(fValue,n*fLen);
215 Long64_t *value = fValue;
216 for (Int_t i=0;i<n;i++) {
217 char *first = (
char*)list->UncheckedAt(i);
218 Long64_t *ii = (Long64_t*)&first[fOffset];
219 for (Int_t j=0;j<fLen;j++) {
229 void TLeafL::ReadValue(std::istream &s, Char_t )
231 #if defined(_MSC_VER) && (_MSC_VER<1300)
232 printf(
"Due to a bug in VC++6, the function TLeafL::ReadValue is dummy\n");
235 ULong64_t *uvalue = (ULong64_t*)GetValuePointer();
236 for (Int_t i=0;i<fLen;i++) s >> uvalue[i];
238 Long64_t *value = (Long64_t*)GetValuePointer();
239 for (Int_t i=0;i<fLen;i++) s >> value[i];
247 void TLeafL::SetAddress(
void *add)
249 if (ResetAddress(add) && (add!=fValue)) {
253 if (TestBit(kIndirectAddress)) {
254 fPointer = (Long64_t**) add;
255 Int_t ncountmax = fLen;
256 if (fLeafCount) ncountmax = fLen*(fLeafCount->GetMaximum() + 1);
257 if ((fLeafCount && ncountmax > Int_t(fLeafCount->GetValue())) ||
258 ncountmax > fNdata || *fPointer == 0) {
259 if (*fPointer)
delete [] *fPointer;
260 if (ncountmax > fNdata) fNdata = ncountmax;
261 *fPointer =
new Long64_t[fNdata];
265 fValue = (Long64_t*)add;
268 fValue =
new Long64_t[fNdata];