12 #ifndef ROOT_TOrdCollection
13 #define ROOT_TOrdCollection
29 class TOrdCollectionIter;
32 class TOrdCollection :
public TSeqCollection {
34 friend class TOrdCollectionIter;
42 Int_t PhysIndex(Int_t idx)
const;
43 Int_t LogIndex(Int_t idx)
const;
44 void MoveGapTo(Int_t newGapStart);
45 Bool_t IllegalIndex(
const char *method, Int_t idx)
const;
46 void Init(Int_t capacity);
47 Bool_t LowWaterMark()
const;
48 void SetCapacity(Int_t newCapacity);
50 TOrdCollection(
const TOrdCollection&);
51 TOrdCollection& operator=(
const TOrdCollection&);
54 enum { kDefaultCapacity = 1, kMinExpand = 8, kShrinkFactor = 2 };
56 typedef TOrdCollectionIter Iterator_t;
58 TOrdCollection(Int_t capacity = kDefaultCapacity);
60 void Clear(Option_t *option=
"");
61 void Delete(Option_t *option=
"");
62 TObject **GetObjectRef(
const TObject *obj)
const;
63 Int_t IndexOf(
const TObject *obj)
const;
64 TIterator *MakeIterator(Bool_t dir = kIterForward)
const;
66 void AddFirst(TObject *obj);
67 void AddLast(TObject *obj);
68 void AddAt(TObject *obj, Int_t idx);
69 void AddAfter(
const TObject *after, TObject *obj);
70 void AddBefore(
const TObject *before, TObject *obj);
71 void PutAt(TObject *obj, Int_t idx);
72 TObject *RemoveAt(Int_t idx);
73 TObject *Remove(TObject *obj);
75 TObject *At(Int_t idx)
const;
76 TObject *Before(
const TObject *obj)
const;
77 TObject *After(
const TObject *obj)
const;
78 TObject *First()
const;
79 TObject *Last()
const;
82 Int_t BinarySearch(TObject *obj);
84 ClassDef(TOrdCollection,0)
96 class TOrdCollectionIter :
public TIterator,
97 public std::iterator<std::bidirectional_iterator_tag,
98 TObject*, std::ptrdiff_t,
99 const TObject**, const TObject*&> {
102 const TOrdCollection *fCol;
107 TOrdCollectionIter() : fCol(0), fCurCursor(0), fCursor(0), fDirection(kIterForward) { }
110 TOrdCollectionIter(
const TOrdCollection *col, Bool_t dir = kIterForward);
111 TOrdCollectionIter(
const TOrdCollectionIter &iter);
112 ~TOrdCollectionIter() { }
113 TIterator &operator=(
const TIterator &rhs);
114 TOrdCollectionIter &operator=(
const TOrdCollectionIter &rhs);
116 const TCollection *GetCollection()
const {
return fCol; }
119 Bool_t operator!=(
const TIterator &aIter)
const;
120 Bool_t operator!=(
const TOrdCollectionIter &aIter)
const;
121 TObject *operator*()
const;
123 ClassDef(TOrdCollectionIter,0)
129 inline Bool_t TOrdCollection::LowWaterMark()
const
131 return (fSize < (fCapacity / 4) && fSize > TCollection::kInitCapacity);
134 inline Int_t TOrdCollection::PhysIndex(Int_t idx)
const
135 {
return (idx < fGapStart) ? idx : idx + fGapSize; }
137 inline Int_t TOrdCollection::LogIndex(Int_t idx)
const
138 {
return (idx < fGapStart) ? idx : idx - fGapSize; }