#ifndef ROOT_TSeqCollection #define ROOT_TSeqCollection //+SEQ,CopyRight,T=NOINCLUDE. ////////////////////////////////////////////////////////////////////////// // // // TSeqCollection // // // // Sequenceable collection abstract base class. TSeqCollection's have // // an ordering relation, i.e. there is a first and last element. // // // ////////////////////////////////////////////////////////////////////////// #ifndef ROOT_TCollection //*KEEP,TCollection. #include "TCollection.h" //*KEND. #endif class TSeqCollection : public TCollection { protected: Bool_t fSorted; TSeqCollection() { } TSeqCollection(TObject *parent) : TCollection(parent) { } virtual void Changed() { fSorted = kFALSE; } public: virtual ~TSeqCollection() { } virtual void Add(TObject *obj) { AddLast(obj); } virtual void AddFirst(TObject *obj) = 0; virtual void AddLast(TObject *obj) = 0; virtual void AddAt(TObject *obj, Int_t idx) = 0; virtual void AddAfter(TObject *after, TObject *obj) = 0; virtual void AddBefore(TObject *before, TObject *obj) = 0; virtual void RemoveFirst() { Remove(First()); } virtual void RemoveLast() { Remove(Last()); } virtual TObject *RemoveAt(Int_t idx) { return Remove(At(idx)); } virtual void RemoveAfter(TObject *after) { Remove(After(after)); } virtual void RemoveBefore(TObject *before) { Remove(Before(before)); } virtual TObject *At(Int_t idx) const = 0; virtual TObject *Before(TObject *obj) const = 0; virtual TObject *After(TObject *obj) const = 0; virtual TObject *First() const = 0; virtual TObject *Last() const = 0; Int_t LastIndex() const { return GetSize() - 1; } virtual Int_t IndexOf(TObject *obj) const; // returns -1 if not found Bool_t IsSorted() { return fSorted; } static Int_t ObjCompare(TObject *a, TObject *b); static void QSort(TObject **a, Int_t first, Int_t last); static void QSort(TObject **a, TObject **b, Int_t first, Int_t last); ClassDef(TSeqCollection,0) //Sequenceable collection ABC }; #endif