#ifndef GledCore_ZList_H
#define GledCore_ZList_H
#include <Glasses/AList.h>
class ZList : public AList
{
MAC_RNR_FRIENDS(ZList);
public:
struct element
{
ZGlass* fLens;
Int_t fId;
element(ZGlass* l=0, Int_t i=0) : fLens(l), fId(i) {}
};
typedef list<element> container;
struct iterator : public container::iterator
{
ZGlass* lens() { return (*this)->fLens; }
ElRep elrep() { return ElRep((*this)->fLens, (*this)->fId); }
ZGlass* operator()() { return (*this)->fLens; }
iterator& operator++() { container::iterator::operator++(); return *this; }
iterator& operator--() { container::iterator::operator--(); return *this; }
iterator operator++(int) { iterator x(*this); operator++(); return x; }
iterator operator--(int) { iterator x(*this); operator--(); return x; }
iterator() {}
iterator(container::iterator i) : container::iterator(i) {}
};
iterator begin() { return mElements.begin(); }
iterator end() { return mElements.end(); }
#ifndef __CINT__
virtual stepper_base* make_stepper_imp();
#endif
protected:
Int_t mNextId;
container mElements;
private:
void _init();
protected:
virtual Int_t remove_references_to(ZGlass* lens);
virtual void clear_list();
virtual void on_insert(iterator iter) {}
virtual void on_remove(iterator iter) {}
virtual void on_rebuild() {}
public:
ZList(const Text_t* n="ZList", const Text_t* t=0) :
AList(n,t) { _init(); }
virtual ~ZList() {}
virtual Int_t RebuildListRefs(An_ID_Demangler* idd);
virtual void ClearList();
virtual ElType_e el_type() { return ET_Id; }
virtual bool elrep_has_id() { return true; }
virtual bool list_deque_ops() { return true; }
virtual bool list_insert_id_ops() { return true; }
virtual void Add (ZGlass* lens);
virtual Int_t RemoveAll(ZGlass* lens);
virtual ZGlass* FrontElement();
virtual ZGlass* BackElement();
virtual void PushBack(ZGlass* lens);
virtual ZGlass* PopBack();
virtual void PushFront(ZGlass* lens);
virtual ZGlass* PopFront();
virtual void InsertById(ZGlass* lens, Int_t before_id);
virtual void RemoveById(Int_t id_to_remove);
Int_t FindFirst(ZGlass* lens);
virtual void SortByName();
ZList* AssertPath(const Text_t* path,
const Text_t* new_el_type="ZList");
void Swallow(ZGlass* entry, Bool_t replace_p=true,
const Text_t* path="",
const Text_t* new_el_type="ZList");
void Swallow(const Text_t* path, ZGlass* entry);
#include "ZList.h7"
ClassDef(ZList, 1);
};
#endif