// @(#)root/cont:$Name: $:$Id: TSeqCollection.h,v 1.7 2004/11/12 21:51:18 brun Exp $
// Author: Fons Rademakers 04/08/95
/*************************************************************************
* Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
#ifndef ROOT_TSeqCollection
#define ROOT_TSeqCollection
//////////////////////////////////////////////////////////////////////////
// //
// TSeqCollection //
// //
// Sequenceable collection abstract base class. TSeqCollection's have //
// an ordering relation, i.e. there is a first and last element. //
// //
//////////////////////////////////////////////////////////////////////////
#ifndef ROOT_TCollection
#include "TCollection.h"
#endif
class TSeqCollection : public TCollection {
protected:
Bool_t fSorted; // true if collection has been sorted
TSeqCollection() : fSorted(kFALSE) { }
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(const TObject *after, TObject *obj) = 0;
virtual void AddBefore(const 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(const TObject *obj) const = 0;
virtual TObject *After(const 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(const TObject *obj) const;
virtual Bool_t IsSorted() const { return fSorted; }
void UnSort() { fSorted = kFALSE; }
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
syntax highlighted by Code2HTML, v. 0.9.1