#ifndef ROOT_TRefArray
#define ROOT_TRefArray
#ifndef ROOT_TSeqCollection
#include "TSeqCollection.h"
#endif
#ifndef ROOT_TBits
#include "TBits.h"
#endif
#ifndef ROOT_TProcessID
#include "TProcessID.h"
#endif
#ifndef ROOT_TSystem
#include "TSystem.h"
#endif
class TRefArray : public TSeqCollection {
friend class TRefArrayIter;
protected:
TProcessID *fPID;
UInt_t *fUIDs;
Int_t fLowerBound;
Int_t fLast;
Bool_t BoundsOk(const char *where, Int_t at) const;
void Init(Int_t s, Int_t lowerBound);
Bool_t OutOfBoundsError(const char *where, Int_t i) const;
Int_t GetAbsLast() const;
TObject *GetFromTable(Int_t idx) const;
public:
TRefArray();
TRefArray(Int_t s, Int_t lowerBound = 0);
TRefArray(const TRefArray &a);
TRefArray& operator=(const TRefArray &a);
virtual ~TRefArray();
virtual void Clear(Option_t *option="");
virtual void Compress();
virtual void Delete(Option_t *option="");
virtual void Expand(Int_t newSize);
Int_t GetEntries() const;
Int_t GetEntriesFast() const {return GetAbsLast()+1;}
Int_t GetLast() const;
TObject **GetObjectRef(const TObject *obj) const;
TProcessID *GetPID() const {return fPID;}
UInt_t GetUID(Int_t at) const;
Bool_t IsEmpty() const { return GetAbsLast() == -1; }
TIterator *MakeIterator(Bool_t dir = kIterForward) const;
void Add(TObject *obj) { AddLast(obj); }
virtual void AddFirst(TObject *obj);
virtual void AddLast(TObject *obj);
virtual void AddAt(TObject *obj, Int_t idx);
virtual void AddAtAndExpand(TObject *obj, Int_t idx);
virtual Int_t AddAtFree(TObject *obj);
virtual void AddAfter(const TObject *after, TObject *obj);
virtual void AddBefore(const TObject *before, TObject *obj);
virtual TObject *RemoveAt(Int_t idx);
virtual TObject *Remove(TObject *obj);
TObject *At(Int_t idx) const;
TObject *Before(const TObject *obj) const;
TObject *After(const TObject *obj) const;
TObject *First() const;
TObject *Last() const;
virtual TObject *operator[](Int_t i) const;
Int_t LowerBound() const { return fLowerBound; }
Int_t IndexOf(const TObject *obj) const;
void SetLast(Int_t last);
virtual void Sort(Int_t upto = kMaxInt);
virtual Int_t BinarySearch(TObject *obj, Int_t upto = kMaxInt);
ClassDef(TRefArray,1)
};
class TRefArrayIter : public TIterator {
private:
const TRefArray *fArray;
Int_t fCursor;
Bool_t fDirection;
TRefArrayIter() : fArray(0), fCursor(0), fDirection(kIterForward) { }
public:
TRefArrayIter(const TRefArray *arr, Bool_t dir = kIterForward);
TRefArrayIter(const TRefArrayIter &iter);
~TRefArrayIter() { }
TIterator &operator=(const TIterator &rhs);
TRefArrayIter &operator=(const TRefArrayIter &rhs);
const TCollection *GetCollection() const { return fArray; }
TObject *Next();
void Reset();
ClassDef(TRefArrayIter,0)
};
inline Bool_t TRefArray::BoundsOk(const char *where, Int_t at) const
{
return (at < fLowerBound || at-fLowerBound >= fSize)
? OutOfBoundsError(where, at)
: kTRUE;
}
inline TObject *TRefArray::operator[](Int_t at) const
{
int j = at-fLowerBound;
if (j >= 0 && j < fSize) {
if (!fPID) return 0;
TObject *obj = fPID->GetObjectWithID(fUIDs[j]);
if (obj==0) obj = GetFromTable(j);
return obj;
}
BoundsOk("At", at);
return 0;
}
inline TObject *TRefArray::At(Int_t at) const
{
int j = at-fLowerBound;
if (j >= 0 && j < fSize) {
if (!fPID) return 0;
TObject *obj = fPID->GetObjectWithID(fUIDs[j]);
if (obj==0) obj = GetFromTable(j);
return obj;
}
BoundsOk("At", at);
return 0;
}
#endif
ROOT page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.