Updated buffer handling with mutex and faster response
[u/mrichter/AliRoot.git] / EVE / EveHLT / AliEveHOMERSourceMap.h
index 5b8e51f..5acfba7 100644 (file)
 
 #include <map>
 
+//______________________________________________________________________________
+//
+// AliEveHOMERSourceMap is an abstract container for HLT HOMER sources.
+// The concrete implementations AliEveHOMERSourceMapByDet and
+// AliEveHOMERSourceMapByType allow retrieval of HOMER sources in proper
+// order as required for their display in EVE object browser.
+
+
 class AliEveHOMERSourceMap : public TNamed
 {
 protected:
+  // --- Inner structs ---
+
   struct iterator_imp_base
   {
     virtual ~iterator_imp_base() {}
 
-    virtual const AliEveHOMERSource::SourceId&    id()    = 0;
+    virtual const AliEveHOMERSource::SourceId&    id()    const = 0;
+    virtual const AliEveHOMERSource::SourceState& state() const = 0;
     virtual       AliEveHOMERSource::SourceState& state() = 0;
 
-    virtual iterator_imp_base* clone() = 0;
+    virtual iterator_imp_base* clone() const = 0;
 
     virtual iterator_imp_base& operator++() = 0;
-    virtual bool operator!=(const iterator_imp_base& o) = 0;
+    virtual bool operator!=(const iterator_imp_base& o) const = 0;
 
-    virtual TString description() = 0;
+    virtual TString description() const = 0;
   };
 
 public:
+  // --- Inner structs ---
+
   struct iterator
   {
     iterator_imp_base* m_imp;
@@ -64,125 +77,36 @@ public:
 
   iterator begin() { return iterator(iterator_imp_begin()); }
   iterator end()   { return iterator(iterator_imp_end()); }
-  
-  enum ESourceGrouping_e { kSG_ByDet, kSG_ByType };
 
-protected:
-  ESourceGrouping_e fGrouping; // Not used so far ...
+  enum ESourceGrouping_e { kSG_ByDet, kSG_ByType };
 
-  virtual iterator_imp_base* iterator_imp_new()   = 0; // Not used so far ...
-  virtual iterator_imp_base* iterator_imp_begin() = 0;
-  virtual iterator_imp_base* iterator_imp_end()   = 0;
+  // --- Interface ---
 
-public:
   AliEveHOMERSourceMap(ESourceGrouping_e grouping);
   virtual ~AliEveHOMERSourceMap() {}
 
   static AliEveHOMERSourceMap* Create(ESourceGrouping_e grouping);
 
-  virtual void FillMap(TList* handles, Bool_t def_state) = 0;
+  virtual void FillMap(const TList* handles, Bool_t def_state) = 0;
 
   void PrintXXX();
 
-  ClassDef(AliEveHOMERSourceMap, 0);
-};
-
-/******************************************************************************/
 
-class AliEveHOMERSourceMapByDet : public AliEveHOMERSourceMap
-{
 protected:
-  typedef std::map<AliEveHOMERSource::SourceId,
-                  AliEveHOMERSource::SourceState,
-                  AliEveHOMERSource::SourceId::CmpByDet>  Map_t;
-  typedef Map_t::iterator                                  Map_i;
-
-  Map_t fMap;
-
-  struct iterator_imp : public iterator_imp_base,
-                       public Map_i
-  {
-    iterator_imp()         : Map_i()   {}
-    iterator_imp(Map_i mi) : Map_i(mi) {}
-    virtual ~iterator_imp() {}
-
-    virtual const AliEveHOMERSource::SourceId&    id()    { return Map_i::operator*().first; }
-    virtual       AliEveHOMERSource::SourceState& state() { return Map_i::operator*().second; }
-
-    virtual iterator_imp* clone()
-    { return new iterator_imp(*this); }
-
-    virtual iterator_imp& operator++()
-    { Map_i::operator++(); return *this; }
-
-    virtual bool operator!=(const iterator_imp_base& o)
-    { return Map_i::operator!=(dynamic_cast<const Map_i&>(o)); }
-
-    virtual TString description();
-  };
-
-  void insert(AliEveHOMERSource::SourceId& sid, AliEveHOMERSource::SourceState& sst, Bool_t def_state);
-
-  virtual iterator_imp_base* iterator_imp_new()   { return new iterator_imp; }
-  virtual iterator_imp_base* iterator_imp_begin() { return new iterator_imp(fMap.begin()); }
-  virtual iterator_imp_base* iterator_imp_end()   { return new iterator_imp(fMap.end());   }
-
-public:
-  AliEveHOMERSourceMapByDet(ESourceGrouping_e grouping);
-  virtual ~AliEveHOMERSourceMapByDet() {}
+  ESourceGrouping_e fGrouping; // Not used so far ...
 
-  virtual void FillMap(TList* handles, Bool_t def_state);
+  virtual iterator_imp_base* iterator_imp_new()   = 0; // Not used so far ...
+  virtual iterator_imp_base* iterator_imp_begin() = 0;
+  virtual iterator_imp_base* iterator_imp_end()   = 0;
 
-  // ClassDef(AliEveHOMERSourceMapByDet, 1);
+  ClassDef(AliEveHOMERSourceMap, 0); // A map of HOMER sources.
 };
 
-/******************************************************************************/
-
-class AliEveHOMERSourceMapByType : public AliEveHOMERSourceMap
-{
-protected:
-  typedef std::map<AliEveHOMERSource::SourceId,
-                  AliEveHOMERSource::SourceState,
-                  AliEveHOMERSource::SourceId::CmpByType> Map_t;
-  typedef Map_t::iterator                                  Map_i;
-
-  Map_t fMap;
 
-  struct iterator_imp : public iterator_imp_base,
-                       public Map_i
-  {
-    iterator_imp()         : Map_i()   {}
-    iterator_imp(Map_i mi) : Map_i(mi) {}
-    virtual ~iterator_imp() {}
-
-    virtual const AliEveHOMERSource::SourceId&    id()    { return Map_i::operator*().first; }
-    virtual       AliEveHOMERSource::SourceState& state() { return Map_i::operator*().second; }
-
-    virtual iterator_imp* clone()
-    { return new iterator_imp(*this); }
-
-    virtual iterator_imp& operator++()
-    { Map_i::operator++(); return *this; }
-
-    virtual bool operator!=(const iterator_imp_base& o)
-    { return Map_i::operator!=(dynamic_cast<const Map_i&>(o)); }
-
-    virtual TString description();
-  };
-
-  void insert(AliEveHOMERSource::SourceId& sid, AliEveHOMERSource::SourceState& sst, Bool_t def_state);
-
-  virtual iterator_imp_base* iterator_imp_new()   { return new iterator_imp; }
-  virtual iterator_imp_base* iterator_imp_begin() { return new iterator_imp(fMap.begin()); }
-  virtual iterator_imp_base* iterator_imp_end()   { return new iterator_imp(fMap.end());   }
+// Include concrete implementations (used to be in the same file).
 
-public:
-  AliEveHOMERSourceMapByType(ESourceGrouping_e grouping);
-  virtual ~AliEveHOMERSourceMapByType() {}
-
-  virtual void FillMap(TList* handles, Bool_t def_state);
+#include "AliEveHOMERSourceMapByDet.h"
+#include "AliEveHOMERSourceMapByType.h"
 
-  // ClassDef(AliEveHOMERSourceMapByType, 1);
-};
 
 #endif