ROOT logo
// $Id: ZNameMap.h 2606 2011-12-07 23:11:39Z 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_ZNameMap_H
#define GledCore_ZNameMap_H

#include <Glasses/ZList.h>

class ZNameMap : public ZList,
                 public ZGlass::NameChangeCB
{
  MAC_RNR_FRIENDS(ZNameMap);

private:
  void _init();

protected:
  // AList ... ZList
  virtual void new_element_check(ZGlass* lens);
  virtual void clear_list();

  // ZList
  virtual void on_insert(ZList::iterator it);
  virtual void on_remove(ZList::iterator it);
  virtual void on_rebuild();

  virtual void insert_with_placement(ZGlass* lens);

  //----------------------------------------------------------------------

  Bool_t      bKeepSorted;      // X{GE} 7 Bool(-join=>1)
  Bool_t      bWarnEqualName;   // X{GS} 7 Bool()

#ifndef __CINT__
  typedef multimap<TString, ZList::iterator>           mName2Iter_t;
  typedef multimap<TString, ZList::iterator>::iterator mName2Iter_i;
  typedef pair<TString, ZList::iterator>               mName2Iter_pair;
  typedef pair<mName2Iter_i, mName2Iter_i>             mName2Iter_i_pair;

  mName2Iter_t mItMap; //!
#endif

  void shoot_sort_mir();

public:
  ZNameMap(const Text_t* n="ZNameMap", const Text_t* t=0);
  virtual ~ZNameMap();

  void SetKeepSorted(Bool_t keep_sorted);

  virtual ZGlass* GetElementByName (const TString& name);
  virtual Int_t   GetElementsByName(const TString& name, lpZGlass_t& dest);

  virtual void SortByName();

  void DumpNameMap(); //! X{E} 7 MButt()

  //----------------------------------------------------------------------
  // Functions that add elements - bKeepSorted overrides placement

  virtual void PushBack(ZGlass* lens);                    // Exported in ZList
  virtual void PushFront(ZGlass* lens);                   // id.
  virtual void InsertById(ZGlass* lens, Int_t before_id); // id.

  //----------------------------------------------------------------------
  // ZGlass::NameChangeCB
  virtual void name_change_cb(ZGlass* lens, const TString& new_name);

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


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