ROOT logo
// $Id: ZVector.h 2088 2008-11-23 20:26:46Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#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:
  // From AList
  virtual Int_t remove_references_to(ZGlass* lens);
  virtual void clear_list();

  // ZVector
  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;  // X{GS} 7 Value(-range=>[1,10,1,100], -join=>1, -width=>6)
  Int_t        mGrowStep; // X{GS} 7 Value(-range=>[0,65536,1], -width=>6)
  Int_t        mReserved; // X{G}  7 ValOut(-join=>1, -width=>6)
  Int_t        mNextIdx;  // X{GE} 7 Value(-range=>[0,1e6,1], -width=>6)
  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();

  //----------------------------------------------------------------------
  // ElRep properties and supported operations.
  //----------------------------------------------------------------------

  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; }

  //----------------------------------------------------------------------
  // List element handling operations.
  //----------------------------------------------------------------------

  // General interface
  virtual void  Add      (ZGlass* lens);   // X{E} C{1}
  virtual Int_t RemoveAll(ZGlass* lens);   // X{E} C{1}

  // Set-by-id interface
  virtual void  SetElementById(ZGlass* lens, Int_t index);  // X{E} C{1}

  virtual ZGlass* GetElementById(Int_t index); // X{E} C{0}

  // ZVector
  virtual void Resize(Int_t size);     // X{E} C{0}
  virtual void Reserve(Int_t reserve); // X{E} C{0}
  virtual void ClipReserve();          // X{E} C{0}

  void SetNextIdx(Int_t nextidx);

  // Direct access for owned vectors
  virtual ZGlass* operator[](Int_t index) const { return mElements[index]; }
  Int_t           FindFirstEmptyId(Int_t index=0);
  Int_t           CountEmptyIds();

  // debug
  void dumpVecStat();

#include "ZVector.h7"
  ClassDef(ZVector, 1);
}; // endclass ZVector


#endif
 ZVector.h:1
 ZVector.h:2
 ZVector.h:3
 ZVector.h:4
 ZVector.h:5
 ZVector.h:6
 ZVector.h:7
 ZVector.h:8
 ZVector.h:9
 ZVector.h:10
 ZVector.h:11
 ZVector.h:12
 ZVector.h:13
 ZVector.h:14
 ZVector.h:15
 ZVector.h:16
 ZVector.h:17
 ZVector.h:18
 ZVector.h:19
 ZVector.h:20
 ZVector.h:21
 ZVector.h:22
 ZVector.h:23
 ZVector.h:24
 ZVector.h:25
 ZVector.h:26
 ZVector.h:27
 ZVector.h:28
 ZVector.h:29
 ZVector.h:30
 ZVector.h:31
 ZVector.h:32
 ZVector.h:33
 ZVector.h:34
 ZVector.h:35
 ZVector.h:36
 ZVector.h:37
 ZVector.h:38
 ZVector.h:39
 ZVector.h:40
 ZVector.h:41
 ZVector.h:42
 ZVector.h:43
 ZVector.h:44
 ZVector.h:45
 ZVector.h:46
 ZVector.h:47
 ZVector.h:48
 ZVector.h:49
 ZVector.h:50
 ZVector.h:51
 ZVector.h:52
 ZVector.h:53
 ZVector.h:54
 ZVector.h:55
 ZVector.h:56
 ZVector.h:57
 ZVector.h:58
 ZVector.h:59
 ZVector.h:60
 ZVector.h:61
 ZVector.h:62
 ZVector.h:63
 ZVector.h:64
 ZVector.h:65
 ZVector.h:66
 ZVector.h:67
 ZVector.h:68
 ZVector.h:69
 ZVector.h:70
 ZVector.h:71
 ZVector.h:72
 ZVector.h:73
 ZVector.h:74
 ZVector.h:75
 ZVector.h:76
 ZVector.h:77
 ZVector.h:78
 ZVector.h:79
 ZVector.h:80
 ZVector.h:81
 ZVector.h:82
 ZVector.h:83
 ZVector.h:84
 ZVector.h:85
 ZVector.h:86
 ZVector.h:87
 ZVector.h:88
 ZVector.h:89
 ZVector.h:90
 ZVector.h:91
 ZVector.h:92
 ZVector.h:93
 ZVector.h:94
 ZVector.h:95
 ZVector.h:96
 ZVector.h:97
 ZVector.h:98
 ZVector.h:99
 ZVector.h:100
 ZVector.h:101
 ZVector.h:102
 ZVector.h:103
 ZVector.h:104
 ZVector.h:105
 ZVector.h:106
 ZVector.h:107
 ZVector.h:108
 ZVector.h:109
 ZVector.h:110
 ZVector.h:111
 ZVector.h:112
 ZVector.h:113
 ZVector.h:114
 ZVector.h:115