#ifndef AliEveAliEveHOMERSourceMap_H
#define AliEveAliEveHOMERSourceMap_H
#include "AliEveHOMERSource.h"
#include <TNamed.h>
#include <map>
class AliEveHOMERSourceMap : public TNamed
{
protected:
struct iterator_imp_base
{
virtual ~iterator_imp_base() {}
virtual const AliEveHOMERSource::SourceId& id() const = 0;
virtual const AliEveHOMERSource::SourceState& state() const = 0;
virtual AliEveHOMERSource::SourceState& state() = 0;
virtual iterator_imp_base* clone() const = 0;
virtual iterator_imp_base& operator++() = 0;
virtual bool operator!=(const iterator_imp_base& o) const = 0;
virtual TString description() const = 0;
};
public:
struct iterator
{
iterator_imp_base* m_imp;
iterator() : m_imp(0) {}
iterator(const iterator& it) : m_imp(it.m_imp->clone()) {}
iterator(iterator_imp_base* imp) : m_imp(imp) {}
~iterator() { delete m_imp; }
iterator& operator= (const iterator& o) { delete m_imp; m_imp = o.m_imp->clone(); return *this; }
bool operator!=(const iterator& o) { return m_imp->operator!=(*o.m_imp); }
const AliEveHOMERSource::SourceId& id() { return m_imp->id(); }
AliEveHOMERSource::SourceState& state() { return m_imp->state(); }
Int_t level();
TString description() { return m_imp->description(); }
iterator& operator++() { m_imp->operator++(); return *this; }
iterator& skip_children()
{
Int_t lvl = level();
do operator++(); while (level() > lvl);
return *this;
}
};
iterator begin() { return iterator(iterator_imp_begin()); }
iterator end() { return iterator(iterator_imp_end()); }
enum ESourceGrouping_e { kSG_ByDet, kSG_ByType };
AliEveHOMERSourceMap(ESourceGrouping_e grouping);
virtual ~AliEveHOMERSourceMap() {}
static AliEveHOMERSourceMap* Create(ESourceGrouping_e grouping);
virtual void FillMap(const TList* handles, Bool_t def_state) = 0;
void PrintXXX();
protected:
ESourceGrouping_e fGrouping;
virtual iterator_imp_base* iterator_imp_new() = 0;
virtual iterator_imp_base* iterator_imp_begin() = 0;
virtual iterator_imp_base* iterator_imp_end() = 0;
ClassDef(AliEveHOMERSourceMap, 0);
};
#endif
AliEveHOMERSourceMap.h:10 AliEveHOMERSourceMap.h:11 AliEveHOMERSourceMap.h:12 AliEveHOMERSourceMap.h:13 AliEveHOMERSourceMap.h:14 AliEveHOMERSourceMap.h:15 AliEveHOMERSourceMap.h:16 AliEveHOMERSourceMap.h:17 AliEveHOMERSourceMap.h:18 AliEveHOMERSourceMap.h:19 AliEveHOMERSourceMap.h:20 AliEveHOMERSourceMap.h:21 AliEveHOMERSourceMap.h:22 AliEveHOMERSourceMap.h:23 AliEveHOMERSourceMap.h:24 AliEveHOMERSourceMap.h:25 AliEveHOMERSourceMap.h:26 AliEveHOMERSourceMap.h:27 AliEveHOMERSourceMap.h:28 AliEveHOMERSourceMap.h:29 AliEveHOMERSourceMap.h:30 AliEveHOMERSourceMap.h:31 AliEveHOMERSourceMap.h:32 AliEveHOMERSourceMap.h:33 AliEveHOMERSourceMap.h:34 AliEveHOMERSourceMap.h:35 AliEveHOMERSourceMap.h:36 AliEveHOMERSourceMap.h:37 AliEveHOMERSourceMap.h:38 AliEveHOMERSourceMap.h:39 AliEveHOMERSourceMap.h:40 AliEveHOMERSourceMap.h:41 AliEveHOMERSourceMap.h:42 AliEveHOMERSourceMap.h:43 AliEveHOMERSourceMap.h:44 AliEveHOMERSourceMap.h:45 AliEveHOMERSourceMap.h:46 AliEveHOMERSourceMap.h:47 AliEveHOMERSourceMap.h:48 AliEveHOMERSourceMap.h:49 AliEveHOMERSourceMap.h:50 AliEveHOMERSourceMap.h:51 AliEveHOMERSourceMap.h:52 AliEveHOMERSourceMap.h:53 AliEveHOMERSourceMap.h:54 AliEveHOMERSourceMap.h:55 AliEveHOMERSourceMap.h:56 AliEveHOMERSourceMap.h:57 AliEveHOMERSourceMap.h:58 AliEveHOMERSourceMap.h:59 AliEveHOMERSourceMap.h:60 AliEveHOMERSourceMap.h:61 AliEveHOMERSourceMap.h:62 AliEveHOMERSourceMap.h:63 AliEveHOMERSourceMap.h:64 AliEveHOMERSourceMap.h:65 AliEveHOMERSourceMap.h:66 AliEveHOMERSourceMap.h:67 AliEveHOMERSourceMap.h:68 AliEveHOMERSourceMap.h:69 AliEveHOMERSourceMap.h:70 AliEveHOMERSourceMap.h:71 AliEveHOMERSourceMap.h:72 AliEveHOMERSourceMap.h:73 AliEveHOMERSourceMap.h:74 AliEveHOMERSourceMap.h:75 AliEveHOMERSourceMap.h:76 AliEveHOMERSourceMap.h:77 AliEveHOMERSourceMap.h:78 AliEveHOMERSourceMap.h:79 AliEveHOMERSourceMap.h:80 AliEveHOMERSourceMap.h:81 AliEveHOMERSourceMap.h:82 AliEveHOMERSourceMap.h:83 AliEveHOMERSourceMap.h:84 AliEveHOMERSourceMap.h:85 AliEveHOMERSourceMap.h:86 AliEveHOMERSourceMap.h:87 AliEveHOMERSourceMap.h:88 AliEveHOMERSourceMap.h:89 AliEveHOMERSourceMap.h:90 AliEveHOMERSourceMap.h:91 AliEveHOMERSourceMap.h:92 AliEveHOMERSourceMap.h:93 AliEveHOMERSourceMap.h:94 AliEveHOMERSourceMap.h:95 AliEveHOMERSourceMap.h:96 AliEveHOMERSourceMap.h:97 AliEveHOMERSourceMap.h:98 AliEveHOMERSourceMap.h:99 AliEveHOMERSourceMap.h:100 AliEveHOMERSourceMap.h:101 AliEveHOMERSourceMap.h:102 AliEveHOMERSourceMap.h:103 AliEveHOMERSourceMap.h:104 AliEveHOMERSourceMap.h:105