ROOT logo
// $Id: ZStringMap.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_ZStringMap_H
#define GledCore_ZStringMap_H

#include <Glasses/AList.h>

class ZStringMap : public AList
{
  MAC_RNR_FRIENDS(ZStringMap);

public:
  typedef map<TString, ZGlass*>  container;
  typedef pair<TString, ZGlass*> element;

  struct iterator : public container::iterator
  {
    ZGlass* lens()  { return (*this)->second; }
    ElRep   elrep() { return ElRep((*this)->second, (*this)->first); }

    ZGlass* operator()() { return (*this)->second; }

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

  // ZStringMap
  virtual void on_insert(iterator iter) {}
  virtual void on_remove(iterator iter) {}
  virtual void on_change(iterator iter, ZGlass* old_lens) {}
  virtual void on_change_label(iterator iter, TString old_label) {}
  virtual void on_rebuild() {}

  container   mElements;
  TString     mAddLensPrefix; // X{GS} 7 Textor()
  TString     mAddLensFormat; // X{GS} 7 Textor(-width=>6, -join=>1)
  Int_t       mAddLensCurId;  // X{GS} 7 Value(-width=>4)

public:
  ZStringMap(const Text_t* n="ZStringMap", const Text_t* t=0) :
    AList(n,t) { _init(); }
  virtual ~ZStringMap() {}

  virtual Int_t RebuildListRefs(An_ID_Demangler* idd);
  virtual void  ClearList();

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

  virtual ElType_e el_type()             { return ET_Label; }

  virtual bool elrep_has_label()         { return true; }
  virtual bool elrep_can_hold_zero()     { return true; }
  virtual bool elrep_can_edit_label()    { return true; }

  virtual bool list_set_label_ops()      { return true; }

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

  // General interface
  virtual void  Add      (ZGlass* lens);
  virtual Int_t RemoveAll(ZGlass* lens);

  // Set-by-label interface
  virtual void SetElementByLabel(ZGlass* lens, TString label); // X{E} C{1}
  virtual void AddLabel(TString label);                        // X{E} C{0}
  virtual void RemoveLabel(TString label);                     // X{E} C{0}
  virtual void ChangeLabel(TString label, TString new_label);  // X{E} C{0}

  virtual ZGlass* GetElementByLabel(TString label); // X{E} C{0}

#include "ZStringMap.h7"
  ClassDef(ZStringMap, 1); // RB-tree with with string indexing (std::map<TString, ZGlass*>).
}; // endclass ZStringMap


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