Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TBranchProxy.h
Go to the documentation of this file.
1// @(#)root/treeplayer:$Id$
2// Author: Philippe Canal 01/06/2004
3
4/*************************************************************************
5 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers and al. *
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_TBranchProxy
13#define ROOT_TBranchProxy
14
16#include "TTree.h"
17#include "TBranchElement.h"
18#include "TLeaf.h"
19#include "TClonesArray.h"
20#include "TString.h"
21#include "TError.h"
23#include "TNotifyLink.h"
24
25#include <algorithm>
26#include <string>
27#include <iostream>
28
29class TBranch;
31
32// Note we could protect the arrays more by introducing a class TArrayWrapper<class T> which somehow knows
33// its internal dimensions and check for them ...
34// template <class T> TArrayWrapper {
35// public:
36// TArrayWrapper(void *where, int dim1);
37// const T operator[](int i) {
38// if (i>=dim1) return 0;
39// return where[i];
40// };
41// };
42// 2D array would actually be a wrapper of a wrapper i.e. has a method TArrayWrapper<T> operator[](int i);
43
44namespace ROOT {
45namespace Internal {
46 ////////////////////////////////////////////////////////////////////////////////
47 /// String builder to be used in the constructors.
49 public:
51 TBranchProxyHelper(const char *left, const char *right = nullptr) :
52 fName() {
53 if (left) {
54 fName = left;
55 if (left[0]&&right && fName[fName.Length()-1]!='.') fName += ".";
56 }
57 if (right) {
58 fName += right;
59 }
60 }
61 operator const char*() { return fName.Data(); }
62 };
63
65} // namespace Internal
66
67// prevent access violation when executing the df017_vecOpsHEP.C tutorial with ROOT built in release mode
68// TODO: to be reviewed when updating Visual Studio or LLVM
69#if defined(_MSC_VER) && !defined(__clang__)
70#pragma optimize("", off)
71#endif
72
73namespace Detail {
75 protected:
76 Internal::TBranchProxyDirector *fDirector; // contain pointer to TTree and entry to be read
77
78 bool fInitialized : 1;
79 const bool fIsMember : 1; // true if we proxy an unsplit data member
80 bool fIsClone : 1; // true if we proxy the inside of a TClonesArray
81 bool fIsaPointer : 1; // true if we proxy a data member of pointer type
82 bool fHasLeafCount : 1;// true if we proxy a variable size leaf of a leaflist
83 bool fSuppressMissingBranchError{false}; // Suppress error issued when the branch is missing from the tree
84
85 const TString fBranchName; // name of the branch to read
86 TBranchProxy *fParent; // Proxy to a parent object
87
88 const TString fDataMember; // name of the (eventual) data member being proxied
89
90
91 TString fClassName; // class name of the object pointed to by the branch
92 TClass *fClass; // class name of the object pointed to by the branch
95 Int_t fOffset; // Offset inside the object
96 Int_t fArrayLength; // Number of element if the data is an array
97
98 TBranch *fBranch; // branch to read
99 union {
100 TBranchElement *fBranchCount; // eventual auxiliary branch (for example holding the size)
101 TLeaf *fLeafCount; // eventual auxiliary leaf (for example holding the size)
102 };
103
104 TNotifyLink<TBranchProxy> fNotify; // Callback object used by the TChain to update this proxy
105
106 Long64_t fRead; // Last entry read
107
108 void *fWhere; // memory location of the data
109 TVirtualCollectionProxy *fCollection; // Handle to the collection containing the data chunk.
110
111 public:
112 virtual void Print();
113
114 TBranchProxy();
115 TBranchProxy(Internal::TBranchProxyDirector* boss, const char* top, const char* name = nullptr);
116 TBranchProxy(Internal::TBranchProxyDirector* boss, const char *top, const char *name, const char *membername);
117 TBranchProxy(Internal::TBranchProxyDirector* boss, TBranchProxy *parent, const char* membername, const char* top = nullptr, const char* name = nullptr);
118 TBranchProxy(Internal::TBranchProxyDirector* boss, TBranch* branch, const char* membername);
119 TBranchProxy(Internal::TBranchProxyDirector *boss, const char *branchname, TBranch *branch,
120 const char *membername, bool suppressMissingBranchError = false);
121 virtual ~TBranchProxy();
122
123 TBranchProxy* GetProxy() { return this; }
124 const char* GetBranchName() const { return fBranchName; }
125
126 void Reset();
127
128 bool Notify() {
129 fRead = -1;
130 return Setup();
131 }
132
133 bool Setup();
134
136 return fInitialized;
137 // return fLastTree && fCurrentTreeNumber == fDirector->GetTree()->GetTreeNumber() && fLastTree == fDirector->GetTree();
138 }
139
140 bool IsaPointer() const {
141 return fIsaPointer;
142 }
143
144 bool Read() {
145 if (R__unlikely(fDirector == nullptr)) return false;
146
147 auto treeEntry = fDirector->GetReadEntry();
148 if (treeEntry != fRead) {
149 if (!IsInitialized()) {
150 if (!Setup()) {
151 ::Error("TBranchProxy::Read","%s",Form("Unable to initialize %s\n",fBranchName.Data()));
152 return false;
153 }
154 }
155 bool result = true;
156 if (fParent) {
157 result = fParent->Read();
158 } else {
159 if (fHasLeafCount) {
160 if (fBranch != fLeafCount->GetBranch())
161 result &= (-1 != fLeafCount->GetBranch()->GetEntry(treeEntry));
162 } else if (fBranchCount) {
163 result &= (-1 != fBranchCount->GetEntry(treeEntry));
164 }
165 // Sometimes the branch might be missing, e.g. when processing multiple
166 // files but one file of the chain does not have the branch.
167 if (R__unlikely(fBranch == nullptr))
168 return false;
169 result &= (-1 != fBranch->GetEntry(treeEntry));
170 }
171 fRead = treeEntry;
173 fCollection->PopProxy(); // works even if no proxy env object was set.
174 if (IsaPointer()) {
175 fCollection->PushProxy( *(void**)fWhere );
176 } else {
178 }
179 }
180 return result;
181 } else {
182 return IsInitialized();
183 }
184 }
185
186private:
188
189 enum class EReadType {
190 kDefault,
201 };
202
204 {
205 if (fParent) {
206 if (!fCollection) {
208 }
209 if (IsaPointer()) {
211 }
213 }
214 if (fHasLeafCount) {
215 return EReadType::kDefault;
216 }
217 if (fBranchCount) {
218 if (fCollection) {
219 if (IsaPointer()) {
221 }
223 }
225 }
226 if (fCollection) {
227 if (IsaPointer()) {
229 }
231 }
233 }
234
236 return false;
237 }
238
240 auto treeEntry = fDirector->GetReadEntry();
241 if (treeEntry != fRead) {
242 const bool result = fParent->Read();
243 fRead = treeEntry;
244 return result;
245 } else {
246 return IsInitialized();
247 }
248 }
249
251 auto treeEntry = fDirector->GetReadEntry();
252 if (treeEntry != fRead) {
253 const bool result = fParent->Read();
254 fRead = treeEntry;
255 fCollection->PopProxy(); // works even if no proxy env object was set.
257 return result;
258 } else {
259 return IsInitialized();
260 }
261 }
262
264 auto treeEntry = fDirector->GetReadEntry();
265 if (treeEntry != fRead) {
266 const bool result = fParent->Read();
267 fRead = treeEntry;
268 fCollection->PopProxy(); // works even if no proxy env object was set.
269 fCollection->PushProxy( *(void**)fWhere );
270 return result;
271 } else {
272 return IsInitialized();
273 }
274 }
275
277 // Sometimes the branch might be missing, e.g. when processing multiple
278 // files but one file of the chain does not have the branch.
279 if (R__unlikely(fBranch == nullptr))
280 return false;
281 auto treeEntry = fDirector->GetReadEntry();
282 if (treeEntry != fRead) {
283 bool result = (-1 != fBranch->GetEntry(treeEntry));
284 fRead = treeEntry;
285 fCollection->PopProxy(); // works even if no proxy env object was set.
286 fCollection->PushProxy( *(void**)fWhere );
287 return result;
288 } else {
289 return IsInitialized();
290 }
291 }
292
294 // Sometimes the branch might be missing, e.g. when processing multiple
295 // files but one file of the chain does not have the branch.
296 if (R__unlikely(fBranch == nullptr))
297 return false;
298 auto treeEntry = fDirector->GetReadEntry();
299 if (treeEntry != fRead) {
300 bool result = (-1 != fBranch->GetEntry(treeEntry));
301 fRead = treeEntry;
302 fCollection->PopProxy(); // works even if no proxy env object was set.
304 return result;
305 } else {
306 return IsInitialized();
307 }
308 }
309
311 // Sometimes the branch might be missing, e.g. when processing multiple
312 // files but one file of the chain does not have the branch.
313 if (R__unlikely(fBranch == nullptr))
314 return false;
315 auto treeEntry = fDirector->GetReadEntry();
316 if (treeEntry != fRead) {
317 bool result = (-1 != fBranch->GetEntry(treeEntry));
318 fRead = treeEntry;
319 return result;
320 } else {
321 return IsInitialized();
322 }
323 }
324
326 // Sometimes the branch might be missing, e.g. when processing multiple
327 // files but one file of the chain does not have the branch.
328 if (R__unlikely(fBranch == nullptr))
329 return false;
330 auto treeEntry = fDirector->GetReadEntry();
331 if (treeEntry != fRead) {
332 bool result = (-1 != fBranchCount->GetEntry(treeEntry));
333 result &= (-1 != fBranch->GetEntry(treeEntry));
334 fRead = treeEntry;
335 fCollection->PopProxy(); // works even if no proxy env object was set.
336 fCollection->PushProxy( *(void**)fWhere );
337 return result;
338 } else {
339 return IsInitialized();
340 }
341 }
342
344 // Sometimes the branch might be missing, e.g. when processing multiple
345 // files but one file of the chain does not have the branch.
346 if (R__unlikely(fBranch == nullptr))
347 return false;
348 auto treeEntry = fDirector->GetReadEntry();
349 if (treeEntry != fRead) {
350 bool result = (-1 != fBranchCount->GetEntry(treeEntry));
351 result &= (-1 != fBranch->GetEntry(treeEntry));
352 fRead = treeEntry;
353 fCollection->PopProxy(); // works even if no proxy env object was set.
355 return result;
356 } else {
357 return IsInitialized();
358 }
359 }
360
362 // Sometimes the branch might be missing, e.g. when processing multiple
363 // files but one file of the chain does not have the branch.
364 if (R__unlikely(fBranch == nullptr))
365 return false;
366 auto treeEntry = fDirector->GetReadEntry();
367 if (treeEntry != fRead) {
368 bool result = (-1 != fBranchCount->GetEntry(treeEntry));
369 result &= (-1 != fBranch->GetEntry(treeEntry));
370 fRead = treeEntry;
371 return result;
372 } else {
373 return IsInitialized();
374 }
375 }
376
377public:
378
379 bool ReadEntries() {
380 if (R__unlikely(fDirector == nullptr))
381 return false;
382 auto treeEntry = fDirector->GetReadEntry();
383 if (treeEntry != fRead) {
384 if (!IsInitialized()) {
385 if (!Setup()) {
386 ::Error("TBranchProxy::ReadEntries","%s",Form("Unable to initialize %s\n",fBranchName.Data()));
387 return false;
388 }
389 }
391 else {
392 if (fBranchCount) {
393 fBranchCount->TBranch::GetEntry(treeEntry);
394 }
395 // Sometimes the branch might be missing, e.g. when processing multiple
396 // files but one file of the chain does not have the branch.
397 if (R__unlikely(fBranch == nullptr))
398 return false;
399 fBranch->TBranch::GetEntry(treeEntry);
400 }
401 // NO - we only read the entries, not the contained objects!
402 // fRead = treeEntry;
403 }
404 return IsInitialized();
405 }
406
407 virtual Int_t GetEntries() {
408 if (!ReadEntries()) return 0;
409 if (fHasLeafCount) {
410 return *(Int_t*)fLeafCount->GetValuePointer();
411 } else if (fBranchCount) {
412 return fBranchCount->GetNdata();
413 } else {
414 return 1;
415 }
416 }
417
419 return fArrayLength;
420 }
421
423 if (!fDirector) return nullptr;
424
425 if (fDirector->GetReadEntry() != fRead) {
426 if (!IsInitialized()) {
427 if (!Setup()) {
428 return nullptr;
429 }
430 }
431 }
432 return fClass;
433 }
434
435 void* GetWhere() const { return fWhere; } // intentionally non-virtual
436
437 /// Return the address of the element number i. Returns `nullptr` for non-collections. It assumed that Setip() has
438 /// been called.
439 virtual void *GetAddressOfElement(UInt_t /*i*/) {
440 return nullptr;
441 }
442
444
445 // protected:
446 virtual void *GetStart(UInt_t /*i*/=0) {
447 // return the address of the start of the object being proxied. Assumes
448 // that Setup() has been called.
449
450 if (fParent) {
451 fWhere = ((unsigned char*)fParent->GetStart()) + fMemberOffset;
452 }
453 if (IsaPointer()) {
454 if (fWhere) return *(void**)fWhere;
455 else return nullptr;
456 } else {
457 return fWhere;
458 }
459 }
460
461 void *GetClaStart(UInt_t i=0) {
462 // return the address of the start of the object being proxied. Assumes
463 // that Setup() has been called. Assumes the object containing this data
464 // member is held in TClonesArray.
465
466 char *location;
467
468 if (fIsClone) {
469
470 TClonesArray *tca;
471 tca = (TClonesArray*)GetStart();
472
473 if (!tca || tca->GetLast()<(Int_t)i) return nullptr;
474
475 location = (char*)tca->At(i);
476
477 return location;
478
479 } else if (fParent) {
480
481 //tcaloc = ((unsigned char*)fParent->GetStart());
482 location = (char*)fParent->GetClaStart(i);
483
484 } else {
485
486 void *tcaloc;
487 tcaloc = fWhere;
488 TClonesArray *tca;
489 tca = (TClonesArray*)tcaloc;
490
491 if (tca->GetLast()<(Int_t)i) return nullptr;
492
493 location = (char*)tca->At(i);
494 }
495
496 if (location) location += fOffset;
497 else return nullptr;
498
499 if (IsaPointer()) {
500 return *(void**)(location);
501 } else {
502 return location;
503 }
504
505 }
506
507 void *GetStlStart(UInt_t i=0) {
508 // return the address of the start of the object being proxied. Assumes
509 // that Setup() has been called. Assumes the object containing this data
510 // member is held in STL Collection.
511
512 char *location = nullptr;
513
514 if (fCollection) {
515
516 if (fCollection->Size()<i) return nullptr;
517
518 location = (char*)fCollection->At(i);
519
520 // return location;
521
522 } else if (fParent) {
523
524 //tcaloc = ((unsigned char*)fParent->GetStart());
525 location = (char*)fParent->GetStlStart(i);
526
527 } else {
528
529 R__ASSERT(0);
530 //void *tcaloc;
531 //tcaloc = fWhere;
532 //TClonesArray *tca;
533 //tca = (TClonesArray*)tcaloc;
534
535 //if (tca->GetLast()<i) return nullptr;
536
537 //location = (char*)tca->At(i);
538 }
539
540 if (location) location += fOffset;
541 else return nullptr;
542
543 if (IsaPointer()) {
544 return *(void**)(location);
545 } else {
546 return location;
547 }
548
549 }
550
551 Int_t GetOffset() { return fOffset; }
552
554 };
555} // namespace Detail
556
557#if defined(_MSC_VER) && !defined(__clang__)
558#pragma optimize("", on)
559#endif
560
561namespace Internal {
562
563 ////////////////////////////////////////////////////////////////////////////////
564 /// Concrete Implementation of the branch proxy around the data members which are array of char
566 public:
567 void Print() override {
569 std::cout << "fWhere " << fWhere << std::endl;
570 if (fWhere) std::cout << "value? " << *(unsigned char*)GetStart() << std::endl;
571 }
572
574 TArrayCharProxy() = default; // work around bug in GCC < 7
575 ~TArrayCharProxy() override = default;
576
578 if (!Read()) return nullptr;
579 unsigned char* str = (unsigned char*)GetStart();
580 return str + i;
581 }
582
583 unsigned char At(UInt_t i) {
584 static unsigned char default_val = {};
585 if (unsigned char* elAddr = (unsigned char*)GetAddressOfElement(i)) {
586 // should add out-of bound test
587 return *elAddr;
588 }
589 return default_val;
590 }
591
592 unsigned char operator [](Int_t i) {
593 return At(i);
594 }
595
596 unsigned char operator [](UInt_t i) {
597 return At(i);
598 }
599
600 operator const char*() {
601 if (!Read()) return "";
602 return (const char*)GetStart();
603 }
604
605 const char* Data() {
606 if (!Read()) return "";
607 return (const char*)GetStart();
608 }
609
610 const char* c_str() {
611 if (!Read()) return "";
612 return (const char*)GetStart();
613 }
614
615 operator std::string() {
616 if (!Read()) return "";
617 return std::string((const char*)GetStart());
618 }
619
620 };
621
622 ////////////////////////////////////////////////////////////////////////////////
623 /// Base class for the proxy around object in TClonesArray.
625 public:
626 void Print() override {
628 std::cout << "fWhere " << fWhere << std::endl;
629 if (fWhere) {
630 if (IsaPointer()) {
631 std::cout << "location " << *(TClonesArray**)fWhere << std::endl;
632 } else {
633 std::cout << "location " << fWhere << std::endl;
634 }
635 }
636 }
637
639 TClaProxy() = default; // work around bug in GCC < 7
640 ~TClaProxy() override = default;
641
643 if (!Read()) return nullptr;
644 return (TClonesArray*)GetStart();
645 }
646
647 Int_t GetEntries() override {
648 if (!ReadEntries()) return 0;
650 if (arr) return arr->GetEntries();
651 return 0;
652 }
653
655 if (!Read()) return nullptr;
656 if (!fWhere) return nullptr;
657 return GetClaStart(i);
658 }
659
660 const TClonesArray* operator->() { return GetPtr(); }
661
662 };
663
664 ////////////////////////////////////////////////////////////////////////////////
665 /// Base class for the proxy around STL containers.
667 public:
668 void Print() override {
670 std::cout << "fWhere " << fWhere << std::endl;
671 if (fWhere) {
672 if (IsaPointer()) {
673 std::cout << "location " << *(TClonesArray**)fWhere << std::endl;
674 } else {
675 std::cout << "location " << fWhere << std::endl;
676 }
677 }
678 }
679
681 TStlProxy() = default; // work around bug in GCC < 7
682 ~TStlProxy() override = default;
683
685 if (!Read()) return nullptr;
686 return GetCollection();
687 }
688
689 Int_t GetEntries() override {
690 if (!ReadEntries()) return 0;
691 return GetPtr()->Size();
692 }
693
695 if (!Read()) return nullptr;
696 if (!fWhere) return nullptr;
697 return GetStlStart(i);
698 }
699
701
702 };
703
704 ////////////////////////////////////////////////////////////////////////////////
705 /// Template of the proxy around objects.
706 template <class T>
708 public:
709 void Print() override {
711 std::cout << "fWhere " << fWhere << std::endl;
712 if (fWhere) std::cout << "value? " << *(T*)GetStart() << std::endl;
713 }
714
716 TImpProxy() = default; // work around bug in GCC < 7
717 ~TImpProxy() override = default;
718
719 operator T() {
720 if (!Read()) return 0;
721 return *(T*)GetStart();
722 }
723
724 // For now explicitly disable copying into the value (i.e. the proxy is read-only).
725 TImpProxy(T) = delete;
726 TImpProxy &operator=(T) = delete;
727
728 };
729
730 ////////////////////////////////////////////////////////////////////////////////
731 /// Helper template to be able to determine and
732 /// use array dimensions.
733 template <class T, int d = 0> struct TArrayType {
734 typedef T type_t;
735 typedef T array_t[d];
736 static constexpr int gSize = d;
737 };
738 ////////////////////////////////////////////////////////////////////////////////
739 /// Helper class for proxy around multi dimension array
740 template <class T> struct TArrayType<T,0> {
741 typedef T type_t;
742 typedef T array_t;
743 static constexpr int gSize = 0;
744 };
745 ////////////////////////////////////////////////////////////////////////////////
746 /// Helper class for proxy around multi dimension array
747 template <class T, int d> struct TMultiArrayType {
748 typedef typename T::type_t type_t;
749 typedef typename T::array_t array_t[d];
750 static constexpr int gSize = d;
751 };
752
753 ////////////////////////////////////////////////////////////////////////////////
754 /// Template for concrete implementation of proxy around array of T
755 template <class T>
757 public:
759 TArrayProxy() = default; // work around bug in GCC < 7
760 ~TArrayProxy() override = default;
761
762 typedef typename T::array_t array_t;
763 typedef typename T::type_t type_t;
764
765 void Print() override {
767 std::cout << "fWhere " << GetWhere() << std::endl;
768 if (GetWhere()) std::cout << "value? " << *(type_t*)GetWhere() << std::endl;
769 }
770
771 Int_t GetEntries() override {
772 return T::gSize;
773 }
774
776 if (!Read()) return nullptr;
777 if (array_t *arr = (array_t*)((type_t*)(GetStart())))
778 return &arr[i];
779 return nullptr;
780 }
781
782 const array_t &At(UInt_t i) {
783 static array_t default_val;
784 // should add out-of bound test
785 if (array_t *arr = (array_t*)GetAddressOfElement(i))
786 return *arr;
787 return default_val;
788 }
789
790 const array_t &operator [](Int_t i) { return At(i); }
791 const array_t &operator [](UInt_t i) { return At(i); }
792 };
793
794 ////////////////////////////////////////////////////////////////////////////////
795 /// Template of the Concrete Implementation of the branch proxy around TClonesArray of T
796 template <class T>
797 class TClaImpProxy : public TClaProxy {
798 public:
799
800 // void Print() override {
801 // TClaProxy::Print();
802 // }
803
805 TClaImpProxy() = default; // work around bug in GCC < 7
806 ~TClaImpProxy() override = default;
807
808 const T& At(UInt_t i) {
809 static T default_val;
810 if (void* addr = GetAddressOfElement(i))
811 return *(T*)addr;
812 return default_val;
813 }
814
815 const T& operator [](Int_t i) { return At(i); }
816 const T& operator [](UInt_t i) { return At(i); }
817
818 // For now explicitly disable copying into the value (i.e. the proxy is read-only).
819 TClaImpProxy(T) = delete;
821
822 };
823
824 ////////////////////////////////////////////////////////////////////////////////
825 /// Template of the Concrete Implementation of the branch proxy around an stl container of T
826 template <class T>
827 class TStlImpProxy : public TStlProxy {
828 public:
829
830 // void Print() override {
831 // TBranchProxy::Print();
832 // }
833
835 TStlImpProxy() = default; // work around bug in GCC < 7
836 ~TStlImpProxy() override = default;
837
838 const T& At(UInt_t i) {
839 static T default_val;
840 if (void* addr = GetAddressOfElement(i))
841 return *(T*)addr;
842 return default_val;
843 }
844
845 const T& operator [](Int_t i) { return At(i); }
846 const T& operator [](UInt_t i) { return At(i); }
847
848 // For now explicitly disable copying into the value (i.e. the proxy is read-only).
849 TStlImpProxy(T) = delete;
851
852 };
853
854 ////////////////////////////////////////////////////////////////////////////////
855 /// Template of the Concrete Implementation of the branch proxy around an TClonesArray of array of T
856 template <class T>
857 class TClaArrayProxy : public TClaProxy {
858 public:
859 typedef typename T::array_t array_t;
860 typedef typename T::type_t type_t;
861
862 // void Print() override {
863 // TClaProxy::Print();
864 // }
865
867 TClaArrayProxy() = default; // work around bug in GCC < 7
868 ~TClaArrayProxy() override = default;
869
870 /* const */ array_t *At(UInt_t i) {
871 static array_t default_val;
872 if (array_t* ptr = (array_t*)GetAddressOfElement(i))
873 return ptr; // no de-ref!
874
875 return &default_val;
876 }
877
878 /* const */ array_t *operator [](Int_t i) { return At(i); }
879 /* const */ array_t *operator [](UInt_t i) { return At(i); }
880 };
881
882
883 ////////////////////////////////////////////////////////////////////////////////
884 /// Template of the Concrete Implementation of the branch proxy around an stl container of array of T
885 template <class T>
886 class TStlArrayProxy : public TStlProxy {
887 public:
888 typedef typename T::array_t array_t;
889 typedef typename T::type_t type_t;
890
891 // void Print() override {
892 // TBranchProxy::Print();
893 // }
894
896 TStlArrayProxy() = default; // work around bug in GCC < 7
897 ~TStlArrayProxy() override = default;
898
899 /* const */ array_t *At(UInt_t i) {
900 static array_t default_val;
901 if (array_t* ptr = (array_t*)GetAddressOfElement(i))
902 return ptr; // no de-ref!
903 return &default_val;
904 }
905
906 /* const */ array_t *operator [](Int_t i) { return At(i); }
907 /* const */ array_t *operator [](UInt_t i) { return At(i); }
908 };
909
910 //TImpProxy<TObject> d;
911 typedef TImpProxy<Double_t> TDoubleProxy; // Concrete Implementation of the branch proxy around the data members which are double
912 typedef TImpProxy<Double32_t> TDouble32Proxy; // Concrete Implementation of the branch proxy around the data members which are double32
913 typedef TImpProxy<Float_t> TFloatProxy; // Concrete Implementation of the branch proxy around the data members which are float
914 typedef TImpProxy<Float16_t> TFloat16Proxy; // Concrete Implementation of the branch proxy around the data members which are float16
915 typedef TImpProxy<UInt_t> TUIntProxy; // Concrete Implementation of the branch proxy around the data members which are unsigned int
916 typedef TImpProxy<ULong_t> TULongProxy; // Concrete Implementation of the branch proxy around the data members which are unsigned long
917 typedef TImpProxy<ULong64_t> TULong64Proxy; // Concrete Implementation of the branch proxy around the data members which are unsigned long long
918 typedef TImpProxy<UShort_t> TUShortProxy; // Concrete Implementation of the branch proxy around the data members which are unsigned short
919 typedef TImpProxy<UChar_t> TUCharProxy; // Concrete Implementation of the branch proxy around the data members which are unsigned char
920 typedef TImpProxy<Int_t> TIntProxy; // Concrete Implementation of the branch proxy around the data members which are int
921 typedef TImpProxy<Long_t> TLongProxy; // Concrete Implementation of the branch proxy around the data members which are long
922 typedef TImpProxy<Long64_t> TLong64Proxy; // Concrete Implementation of the branch proxy around the data members which are long long
923 typedef TImpProxy<Short_t> TShortProxy; // Concrete Implementation of the branch proxy around the data members which are short
924 typedef TImpProxy<Char_t> TCharProxy; // Concrete Implementation of the branch proxy around the data members which are char
925 typedef TImpProxy<bool> TBoolProxy; // Concrete Implementation of the branch proxy around the data members which are bool
926
927 typedef TArrayProxy<TArrayType<Double_t> > TArrayDoubleProxy; // Concrete Implementation of the branch proxy around the data members which are array of double
928 typedef TArrayProxy<TArrayType<Double32_t> > TArrayDouble32Proxy; // Concrete Implementation of the branch proxy around the data members which are array of double32
929 typedef TArrayProxy<TArrayType<Float_t> > TArrayFloatProxy; // Concrete Implementation of the branch proxy around the data members which are array of float
930 typedef TArrayProxy<TArrayType<Float16_t> > TArrayFloat16Proxy; // Concrete Implementation of the branch proxy around the data members which are array of float16
931 typedef TArrayProxy<TArrayType<UInt_t> > TArrayUIntProxy; // Concrete Implementation of the branch proxy around the data members which are array of unsigned int
932 typedef TArrayProxy<TArrayType<ULong_t> > TArrayULongProxy; // Concrete Implementation of the branch proxy around the data members which are array of unsigned long
933 typedef TArrayProxy<TArrayType<ULong64_t> > TArrayULong64Proxy; // Concrete Implementation of the branch proxy around the data members which are array of unsigned long long
934 typedef TArrayProxy<TArrayType<UShort_t> > TArrayUShortProxy; // Concrete Implementation of the branch proxy around the data members which are array of unsigned short
935 typedef TArrayProxy<TArrayType<UChar_t> > TArrayUCharProxy; // Concrete Implementation of the branch proxy around the data members which are array of unsigned char
936 typedef TArrayProxy<TArrayType<Int_t> > TArrayIntProxy; // Concrete Implementation of the branch proxy around the data members which are array of int
937 typedef TArrayProxy<TArrayType<Long_t> > TArrayLongProxy; // Concrete Implementation of the branch proxy around the data members which are array of long
938 typedef TArrayProxy<TArrayType<Long64_t> > TArrayLong64Proxy; // Concrete Implementation of the branch proxy around the data members which are array of long long
939 typedef TArrayProxy<TArrayType<UShort_t> > TArrayShortProxy; // Concrete Implementation of the branch proxy around the data members which are array of short
940 //specialized ! typedef TArrayProxy<TArrayType<Char_t> > TArrayCharProxy; // Concrete Implementation of the branch proxy around the data members which are array of char
941 typedef TArrayProxy<TArrayType<bool> > TArrayBoolProxy; // Concrete Implementation of the branch proxy around the data members which are array of bool
942
943 typedef TClaImpProxy<Double_t> TClaDoubleProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are double
944 typedef TClaImpProxy<Double32_t> TClaDouble32Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are double32
945 typedef TClaImpProxy<Float_t> TClaFloatProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are float
946 typedef TClaImpProxy<Float16_t> TClaFloat16Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are float16
947 typedef TClaImpProxy<UInt_t> TClaUIntProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are unsigned int
948 typedef TClaImpProxy<ULong_t> TClaULongProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are unsigned long
949 typedef TClaImpProxy<ULong64_t> TClaULong64Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are unsigned long long
950 typedef TClaImpProxy<UShort_t> TClaUShortProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are unsigned short
951 typedef TClaImpProxy<UChar_t> TClaUCharProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are unsigned char
952 typedef TClaImpProxy<Int_t> TClaIntProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are int
953 typedef TClaImpProxy<Long_t> TClaLongProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are long
954 typedef TClaImpProxy<Long64_t> TClaLong64Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are long long
955 typedef TClaImpProxy<Short_t> TClaShortProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are short
956 typedef TClaImpProxy<Char_t> TClaCharProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are char
957 typedef TClaImpProxy<bool> TClaBoolProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are bool
958
959 typedef TClaArrayProxy<TArrayType<Double_t> > TClaArrayDoubleProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of double
960 typedef TClaArrayProxy<TArrayType<Double32_t> > TClaArrayDouble32Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of double32
961 typedef TClaArrayProxy<TArrayType<Float_t> > TClaArrayFloatProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of float
962 typedef TClaArrayProxy<TArrayType<Float16_t> > TClaArrayFloat16Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of float16
963 typedef TClaArrayProxy<TArrayType<UInt_t> > TClaArrayUIntProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of unsigned int
964 typedef TClaArrayProxy<TArrayType<ULong_t> > TClaArrayULongProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of unsigned long
965 typedef TClaArrayProxy<TArrayType<ULong64_t> > TClaArrayULong64Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of unsigned long long
966 typedef TClaArrayProxy<TArrayType<UShort_t> > TClaArrayUShortProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of unsigned short
967 typedef TClaArrayProxy<TArrayType<UChar_t> > TClaArrayUCharProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of unsigned char
968 typedef TClaArrayProxy<TArrayType<Int_t> > TClaArrayIntProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of int
969 typedef TClaArrayProxy<TArrayType<Long_t> > TClaArrayLongProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of long
970 typedef TClaArrayProxy<TArrayType<Long64_t> > TClaArrayLong64Proxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of long long
971 typedef TClaArrayProxy<TArrayType<UShort_t> > TClaArrayShortProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of short
972 typedef TClaArrayProxy<TArrayType<Char_t> > TClaArrayCharProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of char
973 typedef TClaArrayProxy<TArrayType<bool> > TClaArrayBoolProxy; // Concrete Implementation of the branch proxy around the data members of object in TClonesArray which are array of bool
974 //specialized ! typedef TClaArrayProxy<TArrayType<Char_t> > TClaArrayCharProxy;
975
976 typedef TStlImpProxy<Double_t> TStlDoubleProxy; // Concrete Implementation of the branch proxy around an stl container of double
977 typedef TStlImpProxy<Double32_t> TStlDouble32Proxy; // Concrete Implementation of the branch proxy around an stl container of double32
978 typedef TStlImpProxy<Float_t> TStlFloatProxy; // Concrete Implementation of the branch proxy around an stl container of float
979 typedef TStlImpProxy<Float16_t> TStlFloat16Proxy; // Concrete Implementation of the branch proxy around an stl container of float16_t
980 typedef TStlImpProxy<UInt_t> TStlUIntProxy; // Concrete Implementation of the branch proxy around an stl container of unsigned int
981 typedef TStlImpProxy<ULong_t> TStlULongProxy; // Concrete Implementation of the branch proxy around an stl container of unsigned long
982 typedef TStlImpProxy<ULong64_t> TStlULong64Proxy; // Concrete Implementation of the branch proxy around an stl container of unsigned long long
983 typedef TStlImpProxy<UShort_t> TStlUShortProxy; // Concrete Implementation of the branch proxy around an stl container of unsigned short
984 typedef TStlImpProxy<UChar_t> TStlUCharProxy; // Concrete Implementation of the branch proxy around an stl container of unsigned char
985 typedef TStlImpProxy<Int_t> TStlIntProxy; // Concrete Implementation of the branch proxy around an stl container of int
986 typedef TStlImpProxy<Long_t> TStlLongProxy; // Concrete Implementation of the branch proxy around an stl container of long
987 typedef TStlImpProxy<Long64_t> TStlLong64Proxy; // Concrete Implementation of the branch proxy around an stl container of long long
988 typedef TStlImpProxy<Short_t> TStlShortProxy; // Concrete Implementation of the branch proxy around an stl container of short
989 typedef TStlImpProxy<Char_t> TStlCharProxy; // Concrete Implementation of the branch proxy around an stl container of char
990 typedef TStlImpProxy<bool> TStlBoolProxy; // Concrete Implementation of the branch proxy around an stl container of bool
991
992 typedef TStlArrayProxy<TArrayType<Double_t> > TStlArrayDoubleProxy; // Concrete Implementation of the branch proxy around an stl container of double
993 typedef TStlArrayProxy<TArrayType<Double32_t> > TStlArrayDouble32Proxy; // Concrete Implementation of the branch proxy around an stl container of double32
994 typedef TStlArrayProxy<TArrayType<Float_t> > TStlArrayFloatProxy; // Concrete Implementation of the branch proxy around an stl container of float
995 typedef TStlArrayProxy<TArrayType<Float16_t> > TStlArrayFloat16Proxy; // Concrete Implementation of the branch proxy around an stl container of float16_t
996 typedef TStlArrayProxy<TArrayType<UInt_t> > TStlArrayUIntProxy; // Concrete Implementation of the branch proxy around an stl container of unsigned int
997 typedef TStlArrayProxy<TArrayType<ULong_t> > TStlArrayULongProxy; // Concrete Implementation of the branch proxy around an stl container of unsigned long
998 typedef TStlArrayProxy<TArrayType<ULong64_t> > TStlArrayULong64Proxy; // Concrete Implementation of the branch proxy around an stl contained of unsigned long long
999 typedef TStlArrayProxy<TArrayType<UShort_t> > TStlArrayUShortProxy; // Concrete Implementation of the branch proxy around an stl container of unsigned short
1000 typedef TStlArrayProxy<TArrayType<UChar_t> > TStlArrayUCharProxy; // Concrete Implementation of the branch proxy around an stl container of unsigned char
1001 typedef TStlArrayProxy<TArrayType<Int_t> > TStlArrayIntProxy; // Concrete Implementation of the branch proxy around an stl container of int
1002 typedef TStlArrayProxy<TArrayType<Long_t> > TStlArrayLongProxy; // Concrete Implementation of the branch proxy around an stl container of long
1003 typedef TStlArrayProxy<TArrayType<Long64_t> > TStlArrayLong64Proxy; // Concrete Implementation of the branch proxy around an stl container of long long
1004 typedef TStlArrayProxy<TArrayType<UShort_t> > TStlArrayShortProxy; // Concrete Implementation of the branch proxy around an stl container of UShort_t
1005 typedef TStlArrayProxy<TArrayType<Char_t> > TStlArrayCharProxy; // Concrete Implementation of the branch proxy around an stl container of char
1006 typedef TStlArrayProxy<TArrayType<bool> > TStlArrayBoolProxy; // Concrete Implementation of the branch proxy around an stl container of bool
1007
1008} // namespace Internal
1009
1010// Reasonably backward compatible.
1012
1013} // namespace ROOT
1014
1015#endif
1016
#define R__unlikely(expr)
Definition RConfig.hxx:586
#define d(i)
Definition RSha256.hxx:102
int Int_t
Definition RtypesCore.h:45
long long Long64_t
Definition RtypesCore.h:69
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
Definition TError.h:125
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
Definition TError.cxx:185
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
char name[80]
Definition TGX11.cxx:110
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
Definition TString.cxx:2489
Base class for all the proxy object.
TNotifyLink< TBranchProxy > fNotify
Internal::TBranchProxyDirector * fDirector
TVirtualCollectionProxy * fCollection
void * GetClaStart(UInt_t i=0)
void * GetStlStart(UInt_t i=0)
TBranchElement * fBranchCount
const char * GetBranchName() const
virtual void * GetStart(UInt_t=0)
virtual Int_t GetArrayLength()
bool Setup()
Initialize/cache the necessary information.
void Reset()
Completely reset the object.
virtual void * GetAddressOfElement(UInt_t)
Return the address of the element number i.
TBranchProxy * GetProxy()
bool GetSuppressErrorsForMissingBranch() const
virtual void Print()
Display the content of the object.
bool ReadNoParentBranchCountCollectionPointer()
TVirtualCollectionProxy * GetCollection()
TStreamerElement * fElement
bool ReadNoParentNoBranchCountCollectionNoPointer()
bool ReadNoParentNoBranchCountCollectionPointer()
virtual ~TBranchProxy()
Typical Destructor.
bool ReadNoParentBranchCountCollectionNoPointer()
Concrete Implementation of the branch proxy around the data members which are array of char.
~TArrayCharProxy() override=default
void Print() override
Display the content of the object.
unsigned char At(UInt_t i)
unsigned char operator[](Int_t i)
void * GetAddressOfElement(UInt_t i) final
Return the address of the element number i.
Template for concrete implementation of proxy around array of T.
void Print() override
Display the content of the object.
~TArrayProxy() override=default
const array_t & At(UInt_t i)
void * GetAddressOfElement(UInt_t i) final
Return the address of the element number i.
const array_t & operator[](Int_t i)
Int_t GetEntries() override
Long64_t GetReadEntry() const
Return the current 'local' entry number; i.e.
String builder to be used in the constructors.
TBranchProxyHelper(const char *left, const char *right=nullptr)
Template of the Concrete Implementation of the branch proxy around an TClonesArray of array of T.
array_t * operator[](Int_t i)
~TClaArrayProxy() override=default
Template of the Concrete Implementation of the branch proxy around TClonesArray of T.
~TClaImpProxy() override=default
TClaImpProxy & operator=(T)=delete
const T & operator[](Int_t i)
Base class for the proxy around object in TClonesArray.
Int_t GetEntries() override
const TClonesArray * operator->()
const TClonesArray * GetPtr()
void * GetAddressOfElement(UInt_t i) final
Return the address of the element number i.
~TClaProxy() override=default
void Print() override
Display the content of the object.
Template of the proxy around objects.
void Print() override
Display the content of the object.
~TImpProxy() override=default
TImpProxy & operator=(T)=delete
Template of the Concrete Implementation of the branch proxy around an stl container of array of T.
~TStlArrayProxy() override=default
array_t * operator[](Int_t i)
Template of the Concrete Implementation of the branch proxy around an stl container of T.
TStlImpProxy & operator=(T)=delete
const T & operator[](Int_t i)
~TStlImpProxy() override=default
Base class for the proxy around STL containers.
~TStlProxy() override=default
void * GetAddressOfElement(UInt_t i) final
Return the address of the element number i.
const TVirtualCollectionProxy * operator->()
Int_t GetEntries() override
void Print() override
Display the content of the object.
TVirtualCollectionProxy * GetPtr()
Base class of TTreeReaderValue.
A Branch for the case of an object.
Int_t GetEntry(Long64_t entry=0, Int_t getall=0) override
Read all branches of a BranchElement and return total number of bytes.
Int_t GetNdata() const
A TTree is a list of TBranches.
Definition TBranch.h:93
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all leaves of entry and return total number of bytes read.
Definition TBranch.cxx:1706
TClass instances represent classes, structs and namespaces in the ROOT type system.
Definition TClass.h:81
An array of clone (identical) objects.
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
Definition TLeaf.h:57
virtual void * GetValuePointer() const
Definition TLeaf.h:138
TBranch * GetBranch() const
Definition TLeaf.h:116
Int_t GetEntries() const override
Return the number of objects in array (i.e.
TObject * At(Int_t idx) const override
Definition TObjArray.h:164
Int_t GetLast() const override
Return index of last object in array.
Basic string class.
Definition TString.h:139
Ssiz_t Length() const
Definition TString.h:417
const char * Data() const
Definition TString.h:376
Defines a common interface to inspect/change the contents of an object that represents a collection.
virtual void PushProxy(void *objectstart)=0
Set the address of the container being proxied and keep track of the previous one.
virtual void PopProxy()=0
Reset the address of the container being proxied to the previous container.
virtual void * At(UInt_t idx)=0
Return the address of the value at index idx
virtual UInt_t Size() const =0
Return the current number of elements in the container.
TImpProxy< Long_t > TLongProxy
TClaArrayProxy< TArrayType< ULong64_t > > TClaArrayULong64Proxy
TClaArrayProxy< TArrayType< Long64_t > > TClaArrayLong64Proxy
TClaArrayProxy< TArrayType< UChar_t > > TClaArrayUCharProxy
TStlImpProxy< UInt_t > TStlUIntProxy
TStlArrayProxy< TArrayType< Long64_t > > TStlArrayLong64Proxy
TClaArrayProxy< TArrayType< UShort_t > > TClaArrayShortProxy
TClaArrayProxy< TArrayType< Double32_t > > TClaArrayDouble32Proxy
TArrayProxy< TArrayType< Int_t > > TArrayIntProxy
TArrayProxy< TArrayType< UShort_t > > TArrayUShortProxy
TStlArrayProxy< TArrayType< ULong_t > > TStlArrayULongProxy
TStlImpProxy< ULong64_t > TStlULong64Proxy
TClaArrayProxy< TArrayType< Char_t > > TClaArrayCharProxy
TStlImpProxy< Double_t > TStlDoubleProxy
TStlArrayProxy< TArrayType< Int_t > > TStlArrayIntProxy
TStlArrayProxy< TArrayType< Float_t > > TStlArrayFloatProxy
TStlArrayProxy< TArrayType< Char_t > > TStlArrayCharProxy
TImpProxy< UShort_t > TUShortProxy
TStlArrayProxy< TArrayType< UShort_t > > TStlArrayShortProxy
TStlImpProxy< UChar_t > TStlUCharProxy
TClaImpProxy< Long_t > TClaLongProxy
TImpProxy< Double_t > TDoubleProxy
TImpProxy< ULong_t > TULongProxy
TStlArrayProxy< TArrayType< UChar_t > > TStlArrayUCharProxy
TArrayProxy< TArrayType< UChar_t > > TArrayUCharProxy
TClaImpProxy< Char_t > TClaCharProxy
TStlImpProxy< Char_t > TStlCharProxy
TClaImpProxy< Int_t > TClaIntProxy
TImpProxy< Long64_t > TLong64Proxy
TStlImpProxy< Float16_t > TStlFloat16Proxy
TClaArrayProxy< TArrayType< Long_t > > TClaArrayLongProxy
TStlImpProxy< Float_t > TStlFloatProxy
TStlArrayProxy< TArrayType< Float16_t > > TStlArrayFloat16Proxy
TStlImpProxy< Long_t > TStlLongProxy
TArrayProxy< TArrayType< UInt_t > > TArrayUIntProxy
TImpProxy< UChar_t > TUCharProxy
TClaArrayProxy< TArrayType< Float_t > > TClaArrayFloatProxy
TImpProxy< Char_t > TCharProxy
TArrayProxy< TArrayType< UShort_t > > TArrayShortProxy
TClaArrayProxy< TArrayType< Int_t > > TClaArrayIntProxy
TImpProxy< ULong64_t > TULong64Proxy
TArrayProxy< TArrayType< Double_t > > TArrayDoubleProxy
TClaImpProxy< Long64_t > TClaLong64Proxy
TArrayProxy< TArrayType< ULong64_t > > TArrayULong64Proxy
TImpProxy< Int_t > TIntProxy
TClaArrayProxy< TArrayType< UInt_t > > TClaArrayUIntProxy
TClaImpProxy< Short_t > TClaShortProxy
TClaArrayProxy< TArrayType< UShort_t > > TClaArrayUShortProxy
TArrayProxy< TArrayType< bool > > TArrayBoolProxy
TArrayProxy< TArrayType< Float_t > > TArrayFloatProxy
TImpProxy< Float16_t > TFloat16Proxy
TStlArrayProxy< TArrayType< UInt_t > > TStlArrayUIntProxy
TClaImpProxy< Double32_t > TClaDouble32Proxy
TStlArrayProxy< TArrayType< Double32_t > > TStlArrayDouble32Proxy
TClaImpProxy< UInt_t > TClaUIntProxy
TArrayProxy< TArrayType< ULong_t > > TArrayULongProxy
TStlImpProxy< Int_t > TStlIntProxy
TClaImpProxy< Double_t > TClaDoubleProxy
TStlArrayProxy< TArrayType< bool > > TStlArrayBoolProxy
TClaImpProxy< ULong_t > TClaULongProxy
TArrayProxy< TArrayType< Long64_t > > TArrayLong64Proxy
TClaImpProxy< ULong64_t > TClaULong64Proxy
TImpProxy< Double32_t > TDouble32Proxy
TClaArrayProxy< TArrayType< ULong_t > > TClaArrayULongProxy
TImpProxy< bool > TBoolProxy
TImpProxy< UInt_t > TUIntProxy
TClaImpProxy< UChar_t > TClaUCharProxy
TClaImpProxy< Float_t > TClaFloatProxy
TStlImpProxy< bool > TStlBoolProxy
TImpProxy< Float_t > TFloatProxy
TClaImpProxy< UShort_t > TClaUShortProxy
TArrayProxy< TArrayType< Float16_t > > TArrayFloat16Proxy
TImpProxy< Short_t > TShortProxy
TClaImpProxy< bool > TClaBoolProxy
TArrayProxy< TArrayType< Long_t > > TArrayLongProxy
TStlImpProxy< Double32_t > TStlDouble32Proxy
TStlArrayProxy< TArrayType< UShort_t > > TStlArrayUShortProxy
TClaArrayProxy< TArrayType< Double_t > > TClaArrayDoubleProxy
TStlArrayProxy< TArrayType< ULong64_t > > TStlArrayULong64Proxy
TStlArrayProxy< TArrayType< Long_t > > TStlArrayLongProxy
TStlImpProxy< UShort_t > TStlUShortProxy
TClaImpProxy< Float16_t > TClaFloat16Proxy
TStlImpProxy< Long64_t > TStlLong64Proxy
TStlImpProxy< Short_t > TStlShortProxy
TClaArrayProxy< TArrayType< Float16_t > > TClaArrayFloat16Proxy
TClaArrayProxy< TArrayType< bool > > TClaArrayBoolProxy
TStlImpProxy< ULong_t > TStlULongProxy
TStlArrayProxy< TArrayType< Double_t > > TStlArrayDoubleProxy
TArrayProxy< TArrayType< Double32_t > > TArrayDouble32Proxy
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
Helper template to be able to determine and use array dimensions.
static constexpr int gSize
Helper class for proxy around multi dimension array.