12 #ifndef ROOT_TGeoBranchArray
13 #define ROOT_TGeoBranchArray
22 class TGeoBranchArray :
public TObject
29 TGeoNode *fRealArray[1];
32 TGeoBranchArray(Int_t level);
33 TGeoBranchArray(
const TGeoBranchArray&);
36 kBASelfAlloc = BIT(14)
40 TGeoBranchArray(TRootIOCtor*) : TObject(), fLevel(0), fMaxLevel(0), fMatrix(), fArray(0) { fRealArray[0] =
nullptr; }
43 static TGeoBranchArray *MakeInstance(
size_t maxlevel);
46 static TGeoBranchArray *MakeInstanceAt(
size_t maxlevel,
void *addr);
49 static TGeoBranchArray *MakeCopy(
const TGeoBranchArray &other);
52 static TGeoBranchArray *MakeCopyAt(
const TGeoBranchArray &other,
void *addr);
55 static void ReleaseInstance(TGeoBranchArray *obj);
58 TGeoBranchArray& operator=(
const TGeoBranchArray&);
61 void CopyTo(TGeoBranchArray *dest);
64 static size_t SizeOf(
size_t maxlevel)
65 {
return (
sizeof(TGeoBranchArray)+
sizeof(TGeoBranchArray*)*(maxlevel)); }
68 static size_t SizeOfInstance(
size_t maxlevel)
69 {
return (
sizeof(TGeoBranchArray)+
sizeof(TGeoBranchArray*)*(maxlevel)); }
71 inline size_t SizeOf()
const
72 {
return (
sizeof(TGeoBranchArray)+
sizeof(TGeoBranchArray*)*(fMaxLevel)); }
76 void *DataStart()
const {
return (
void*)&fLevel;}
79 size_t DataSize()
const {
return SizeOf()-size_t(&fLevel)+(size_t)
this;}
83 void UpdateArray(
size_t nobj);
86 virtual ~TGeoBranchArray() {}
88 Bool_t operator ==(
const TGeoBranchArray& other)
const;
89 Bool_t operator !=(
const TGeoBranchArray& other)
const;
90 Bool_t operator >(
const TGeoBranchArray& other)
const;
91 Bool_t operator <(
const TGeoBranchArray& other)
const;
92 Bool_t operator >=(
const TGeoBranchArray& other)
const;
93 Bool_t operator <=(
const TGeoBranchArray& other)
const;
95 void AddLevel(Int_t dindex);
96 static Long64_t BinarySearch(Long64_t n,
const TGeoBranchArray **array, TGeoBranchArray *value);
97 virtual Int_t Compare(
const TObject *obj)
const;
99 TGeoNode **GetArray()
const {
return fArray;}
100 size_t GetLevel()
const {
return fLevel;}
101 size_t GetMaxLevel()
const {
return fMaxLevel;}
103 *GetMatrix()
const {
return &fMatrix;}
104 TGeoNode *GetNode(Int_t level)
const {
return fArray[level];}
105 TGeoNode *GetCurrentNode()
const {
return fArray[fLevel];}
106 void GetPath(TString &path)
const;
107 void Init(TGeoNode **branch, TGeoMatrix *global, Int_t level);
108 void InitFromNavigator(TGeoNavigator *nav);
109 virtual Bool_t IsSortable()
const {
return kTRUE;}
110 Bool_t IsOutside()
const {
return (fLevel<0)?kTRUE:kFALSE;}
111 virtual void Print(Option_t *option=
"")
const;
112 static void Sort(Int_t n, TGeoBranchArray **array, Int_t *index, Bool_t down=kTRUE);
113 void UpdateNavigator(TGeoNavigator *nav)
const;
115 ClassDef(TGeoBranchArray, 4)
118 struct compareBAasc {
119 compareBAasc(TGeoBranchArray **d) : fData(d) {}
120 bool operator ()(Int_t i1, Int_t i2) {
return **(fData+i1) < **(fData+i2);}
121 TGeoBranchArray **fData;
124 struct compareBAdesc {
125 compareBAdesc(TGeoBranchArray **d) : fData(d) {}
126 bool operator ()(Int_t i1, Int_t i2) {
return **(fData+i1) > **(fData+i2);}
127 TGeoBranchArray **fData;