#ifndef GledCore_ZVector_H
#define GledCore_ZVector_H
#include <Glasses/AList.h>
class ZVector : public AList
{
MAC_RNR_FRIENDS(ZVector);
private:
void _init();
public:
typedef vector<ZGlass*> container;
struct iterator : public container::iterator
{
Int_t idx;
ZGlass* lens() { return *((container::iterator) *this); }
ElRep elrep() { return ElRep(lens(), idx); }
ZGlass* operator()() { return lens(); }
iterator& operator++() { container::iterator::operator++(); ++idx; return *this; }
iterator& operator--() { container::iterator::operator--(); --idx; return *this; }
iterator operator++(int) { iterator x(*this); operator++(); return x; }
iterator operator--(int) { iterator x(*this); operator--(); return x; }
iterator() : container::iterator(), idx(0) {}
iterator(container::iterator i, Int_t x) : container::iterator(i), idx(x) {}
};
iterator begin() { return iterator(mElements.begin(), 0); }
iterator end() { return iterator(mElements.end(), mSize); }
#ifndef __CINT__
virtual stepper_base* make_stepper_imp();
#endif
protected:
virtual Int_t remove_references_to(ZGlass* lens);
virtual void clear_list();
virtual void on_insert(Int_t idx) {}
virtual void on_remove(Int_t idx) {}
virtual void on_change(Int_t idx, ZGlass* old_lens) {}
virtual void on_rebuild() {}
Float_t mGrowFac;
Int_t mGrowStep;
Int_t mReserved;
Int_t mNextIdx;
container mElements;
public:
ZVector(const Text_t* n="ZVector", const Text_t* t=0) :
AList(n,t) { _init(); }
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 elrep_can_hold_zero() { return true; }
virtual bool list_set_id_ops() { return true; }
virtual void Add (ZGlass* lens);
virtual Int_t RemoveAll(ZGlass* lens);
virtual void SetElementById(ZGlass* lens, Int_t index);
virtual ZGlass* GetElementById(Int_t index);
virtual void Resize(Int_t size);
virtual void Reserve(Int_t reserve);
virtual void ClipReserve();
void SetNextIdx(Int_t nextidx);
virtual ZGlass* operator[](Int_t index) const { return mElements[index]; }
Int_t FindFirstEmptyId(Int_t index=0);
Int_t CountEmptyIds();
void dumpVecStat();
#include "ZVector.h7"
ClassDef(ZVector, 1);
};
#endif