ROOT logo
// $Id: ZDeque.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_ZDeque_H
#define GledCore_ZDeque_H

#include <Glasses/AList.h>

class ZDeque : public AList
{
  MAC_RNR_FRIENDS(ZDeque);

public:

  typedef list<ZGlass*> container;

  struct iterator : public container::iterator
  {
    ZGlass* lens()  { return **this; }
    ElRep   elrep() { return ElRep(**this); }

    ZGlass* operator()() { return **this; }

    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

private:
  void _init();

protected:
  container       mElements; //!

  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:
  ZDeque(const Text_t* n="ZDeque", 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 bool list_deque_ops()       { return true; }

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

  // General interface
  virtual void    Add      (ZGlass* lens); // Exported in AList
  virtual Int_t   RemoveAll(ZGlass* lens); // -"-

  // Deque interface
  virtual ZGlass* FrontElement();          // X{E} C{0}
  virtual ZGlass* BackElement();           // X{E} C{0}
  virtual void    PushBack(ZGlass* lens);  // X{E} C{1}
  virtual ZGlass* PopBack();               // X{E} C{0}
  virtual void    PushFront(ZGlass* lens); // X{E} C{1}
  virtual ZGlass* PopFront();              // X{E} C{0}

#include "ZDeque.h7"
  ClassDef(ZDeque, 1); // Double-ended queue (supports front/back operations)
}; // endclass ZDeque


#endif
 ZDeque.h:1
 ZDeque.h:2
 ZDeque.h:3
 ZDeque.h:4
 ZDeque.h:5
 ZDeque.h:6
 ZDeque.h:7
 ZDeque.h:8
 ZDeque.h:9
 ZDeque.h:10
 ZDeque.h:11
 ZDeque.h:12
 ZDeque.h:13
 ZDeque.h:14
 ZDeque.h:15
 ZDeque.h:16
 ZDeque.h:17
 ZDeque.h:18
 ZDeque.h:19
 ZDeque.h:20
 ZDeque.h:21
 ZDeque.h:22
 ZDeque.h:23
 ZDeque.h:24
 ZDeque.h:25
 ZDeque.h:26
 ZDeque.h:27
 ZDeque.h:28
 ZDeque.h:29
 ZDeque.h:30
 ZDeque.h:31
 ZDeque.h:32
 ZDeque.h:33
 ZDeque.h:34
 ZDeque.h:35
 ZDeque.h:36
 ZDeque.h:37
 ZDeque.h:38
 ZDeque.h:39
 ZDeque.h:40
 ZDeque.h:41
 ZDeque.h:42
 ZDeque.h:43
 ZDeque.h:44
 ZDeque.h:45
 ZDeque.h:46
 ZDeque.h:47
 ZDeque.h:48
 ZDeque.h:49
 ZDeque.h:50
 ZDeque.h:51
 ZDeque.h:52
 ZDeque.h:53
 ZDeque.h:54
 ZDeque.h:55
 ZDeque.h:56
 ZDeque.h:57
 ZDeque.h:58
 ZDeque.h:59
 ZDeque.h:60
 ZDeque.h:61
 ZDeque.h:62
 ZDeque.h:63
 ZDeque.h:64
 ZDeque.h:65
 ZDeque.h:66
 ZDeque.h:67
 ZDeque.h:68
 ZDeque.h:69
 ZDeque.h:70
 ZDeque.h:71
 ZDeque.h:72
 ZDeque.h:73
 ZDeque.h:74
 ZDeque.h:75
 ZDeque.h:76
 ZDeque.h:77
 ZDeque.h:78
 ZDeque.h:79
 ZDeque.h:80
 ZDeque.h:81
 ZDeque.h:82
 ZDeque.h:83
 ZDeque.h:84
 ZDeque.h:85
 ZDeque.h:86
 ZDeque.h:87
 ZDeque.h:88
 ZDeque.h:89