// @(#)root/cont:$Name: $:$Id: TOrdCollection.h,v 1.6 2004/11/12 21:51:18 brun Exp $
// Author: Fons Rademakers 13/09/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_TOrdCollection
#define ROOT_TOrdCollection
//////////////////////////////////////////////////////////////////////////
// //
// TOrdCollection //
// //
// Ordered collection. //
// //
//////////////////////////////////////////////////////////////////////////
#ifndef ROOT_TSeqCollection
#include "TSeqCollection.h"
#endif
class TOrdCollectionIter;
class TOrdCollection : public TSeqCollection {
friend class TOrdCollectionIter;
private:
TObject **fCont;
Int_t fCapacity;
Int_t fGapStart;
Int_t fGapSize;
Int_t PhysIndex(Int_t idx) const;
Int_t LogIndex(Int_t idx) const;
void MoveGapTo(Int_t newGapStart);
Bool_t IllegalIndex(const char *method, Int_t idx) const;
void Init(Int_t capacity);
Bool_t LowWaterMark() const;
void SetCapacity(Int_t newCapacity);
public:
enum { kDefaultCapacity = 1, kMinExpand = 8, kShrinkFactor = 2 };
TOrdCollection(Int_t capacity = kDefaultCapacity);
~TOrdCollection();
void Clear(Option_t *option="");
void Delete(Option_t *option="");
TObject **GetObjectRef(const TObject *obj) const;
Int_t IndexOf(const TObject *obj) const;
TIterator *MakeIterator(Bool_t dir = kIterForward) const;
void AddFirst(TObject *obj);
void AddLast(TObject *obj);
void AddAt(TObject *obj, Int_t idx);
void AddAfter(const TObject *after, TObject *obj);
void AddBefore(const TObject *before, TObject *obj);
void PutAt(TObject *obj, Int_t idx);
TObject *RemoveAt(Int_t idx);
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;
void Sort();
Int_t BinarySearch(TObject *obj);
ClassDef(TOrdCollection,0) //An ordered collection
};
//////////////////////////////////////////////////////////////////////////
// //
// TOrdCollectionIter //
// //
// Iterator of ordered collection. //
// //
//////////////////////////////////////////////////////////////////////////
class TOrdCollectionIter : public TIterator {
private:
const TOrdCollection *fCol; //collection being iterated
Int_t fCursor; //current position in collection
Bool_t fDirection; //iteration direction
TOrdCollectionIter() : fCol(0) { }
public:
TOrdCollectionIter(const TOrdCollection *col, Bool_t dir = kIterForward);
TOrdCollectionIter(const TOrdCollectionIter &iter);
~TOrdCollectionIter() { }
TIterator &operator=(const TIterator &rhs);
TOrdCollectionIter &operator=(const TOrdCollectionIter &rhs);
const TCollection *GetCollection() const { return fCol; }
TObject *Next();
void Reset();
ClassDef(TOrdCollectionIter,0) //Ordered collection iterator
};
//---- inlines -----------------------------------------------------------------
inline Bool_t TOrdCollection::LowWaterMark() const
{
return (fSize < (fCapacity / 4) && fSize > TCollection::kInitCapacity);
}
inline Int_t TOrdCollection::PhysIndex(Int_t idx) const
{ return (idx < fGapStart) ? idx : idx + fGapSize; }
inline Int_t TOrdCollection::LogIndex(Int_t idx) const
{ return (idx < fGapStart) ? idx : idx - fGapSize; }
#endif
syntax highlighted by Code2HTML, v. 0.9.1