1 // @(#)root/cont:$Id$ 2 // Author: Fons Rademakers 04/08/95 3 4 /************************************************************************* 5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. * 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_TSeqCollection 13 #define ROOT_TSeqCollection 14 15 16 ////////////////////////////////////////////////////////////////////////// 17 // // 18 // TSeqCollection // 19 // // 20 // Sequenceable collection abstract base class. TSeqCollection's have // 21 // an ordering relation, i.e. there is a first and last element. // 22 // // 23 ////////////////////////////////////////////////////////////////////////// 24 25 #ifndef ROOT_TCollection 26 #include "TCollection.h" 27 #endif 28 29 30 class TSeqCollection : public TCollection { 31 32 protected: 33 Bool_t fSorted; // true if collection has been sorted 34 35 TSeqCollection() : fSorted(kFALSE) { } 36 virtual void Changed() { fSorted = kFALSE; } 37 38 public: 39 virtual ~TSeqCollection() { } 40 virtual void Add(TObject *obj) { AddLast(obj); } 41 virtual void AddFirst(TObject *obj) = 0; 42 virtual void AddLast(TObject *obj) = 0; 43 virtual void AddAt(TObject *obj, Int_t idx) = 0; 44 virtual void AddAfter(const TObject *after, TObject *obj) = 0; 45 virtual void AddBefore(const TObject *before, TObject *obj) = 0; 46 virtual void RemoveFirst() { Remove(First()); } 47 virtual void RemoveLast() { Remove(Last()); } 48 virtual TObject *RemoveAt(Int_t idx) { return Remove(At(idx)); } 49 virtual void RemoveAfter(TObject *after) { Remove(After(after)); } 50 virtual void RemoveBefore(TObject *before) { Remove(Before(before)); } 51 52 virtual TObject *At(Int_t idx) const = 0; 53 virtual TObject *Before(const TObject *obj) const = 0; 54 virtual TObject *After(const TObject *obj) const = 0; 55 virtual TObject *First() const = 0; 56 virtual TObject *Last() const = 0; 57 Int_t LastIndex() const { return GetSize() - 1; } 58 virtual Int_t GetLast() const; 59 virtual Int_t IndexOf(const TObject *obj) const; 60 virtual Bool_t IsSorted() const { return fSorted; } 61 void UnSort() { fSorted = kFALSE; } 62 Long64_t Merge(TCollection *list); 63 64 static Int_t ObjCompare(TObject *a, TObject *b); 65 static void QSort(TObject **a, Int_t first, Int_t last); 66 static inline void QSort(TObject **a, TObject **b, Int_t first, Int_t last) { QSort(a, 1, &b, first, last); } 67 static void QSort(TObject **a, Int_t nBs, TObject ***b, Int_t first, Int_t last); 68 69 ClassDef(TSeqCollection,0) //Sequenceable collection ABC 70 }; 71 72 #endif 73