39 ClassImp(RooMultiCatIter);
49 RooMultiCatIter::RooMultiCatIter(
const RooArgSet& catList,
const char* rangeName) : _catList(
"catList")
52 _rangeName = rangeName ;
62 RooMultiCatIter::RooMultiCatIter(
const RooMultiCatIter& other) : TIterator(other), _catList(
"catList")
64 initialize(other._catList) ;
72 void RooMultiCatIter::initialize(
const RooArgSet& catList)
75 TIterator* catIter = catList.createIterator() ;
77 while ((obj = catIter->Next())) {
78 _catList.add((RooAbsArg&)*obj) ;
83 _nIter = catList.getSize() ;
84 _iterList =
new pTIterator[_nIter] ;
85 _catPtrList =
new pRooCategory[_nIter] ;
86 _curTypeList =
new RooCatType[_nIter] ;
91 TIterator* cIter = _catList.createIterator() ;
92 RooAbsCategoryLValue* cat ;
93 while((cat=(RooAbsCategoryLValue*)cIter->Next())) {
94 _catPtrList[_curIter] = cat ;
95 _iterList[_curIter] = cat->typeIterator() ;
96 _iterList[_curIter]->Next() ;
113 RooMultiCatIter::~RooMultiCatIter()
115 for (_curIter=0 ; _curIter<_nIter ; _curIter++) {
116 delete _iterList[_curIter] ;
119 delete[] _catPtrList ;
120 delete[] _curTypeList ;
128 const TCollection* RooMultiCatIter::GetCollection()
const
142 TObjString* RooMultiCatIter::compositeLabel()
144 TString& str = _compositeLabel.String() ;
148 for (i=0 ; i<_nIter ; i++) {
149 if (i>0) str.Append(
";") ;
150 str.Append(_curTypeList[i].GetName()) ;
154 return &_compositeLabel ;
162 TObject* RooMultiCatIter::Next()
165 if (_curIter==_nIter) {
170 RooCatType* next = (RooCatType*) _iterList[_curIter]->Next() ;
174 _curTypeList[_curIter] = *next ;
175 _curTypeList[_curIter].SetName(next->GetName()) ;
178 if (_curIter>0) _curIter=0 ;
180 _curItem = compositeLabel() ;
185 _iterList[_curIter]->Reset() ;
186 next = (RooCatType*) _iterList[_curIter]->Next() ;
188 _curTypeList[_curIter] = *next ;
189 _curTypeList[_curIter].SetName(next->GetName()) ;
205 void RooMultiCatIter::Reset()
207 for (_curIter=0 ; _curIter<_nIter ; _curIter++) {
208 TIterator* cIter = _iterList[_curIter] ;
210 RooCatType* first = (RooCatType*) cIter->Next() ;
212 if (_curIter==0) cIter->Reset() ;
213 _curTypeList[_curIter] = *first ;
214 _curTypeList[_curIter].SetName(first->GetName()) ;
224 TObject *RooMultiCatIter::operator*()
const
236 bool RooMultiCatIter::operator!=(
const TIterator &aIter)
const
238 if ((aIter.IsA() == RooMultiCatIter::Class())) {
239 const RooMultiCatIter &iter(dynamic_cast<const RooMultiCatIter &>(aIter));
240 return (_curItem != iter._curItem);