ROOT logo
#ifndef ALIMUONDIGITSTOREVIMPL_H
#define ALIMUONDIGITSTOREVIMPL_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* See cxx source for full Copyright notice                               */

// $Id$

/// \ingroup base
/// \class AliMUONDigitStoreVImpl
/// \brief Base implementation of VDigitStore
/// 
// author Laurent Aphecetche

#ifndef ALIMUONVDIGITSTORE_H
#  include "AliMUONVDigitStore.h"
#endif

class TClonesArray;
class AliMUON2DMap;

class AliMUONDigitStoreVImpl : public AliMUONVDigitStore
{
  friend class AliMUONDigitStoreVImplIterator;
  
public:
  AliMUONDigitStoreVImpl(const char* concreteClassName);
  AliMUONDigitStoreVImpl(const AliMUONDigitStoreVImpl& rhs);
  AliMUONDigitStoreVImpl& operator=(const AliMUONDigitStoreVImpl& rhs);
  virtual ~AliMUONDigitStoreVImpl();
  
  /// Whether we can be connected to a TTree
  virtual Bool_t CanConnect() const { return kTRUE; }
  
  virtual Bool_t Connect(TTree& tree, Bool_t alone = kTRUE) const;
  
  virtual void Clear(Option_t* opt="");
  
  virtual AliMUONVDigit* CreateDigit(Int_t detElemId, Int_t manuId,
                                     Int_t manuChannel, Int_t cathode) const = 0;
  
  using AliMUONVDigitStore::Add;
  
  virtual AliMUONVDigit* Add(const AliMUONVDigit& digit, EReplacePolicy replace);
  
  virtual TIterator* CreateIterator() const;
  
  virtual TIterator* CreateIterator(Int_t firstDetElemId, 
                                    Int_t lastDetElemId,
                                    Int_t cathode=2) const;
  
  virtual TIterator* CreateTrackerIterator() const;
  
  virtual TIterator* CreateTriggerIterator() const;
  
  using AliMUONVStore::FindObject;

  virtual AliMUONVDigit* FindObject(UInt_t uniqueID) const;

  virtual AliMUONVDigit* FindObject(Int_t detElemId, Int_t manuId, 
                                    Int_t manuChannel, Int_t cathode) const;
  
  using AliMUONVDigitStore::GetSize;
  
  virtual Int_t GetSize() const;
  
  virtual AliMUONVDigit* Remove(AliMUONVDigit& digit);

protected:
  /// Add concrete digit
  virtual AliMUONVDigit* AddConcreteDigit(TClonesArray& a, 
                                          const AliMUONVDigit& digit,
                                          Int_t index) = 0;
  
private:
  
  AliMUONVDigit* Find(const AliMUONVDigit& digit) const;
  
  void UpdateIndex(const AliMUONVDigit& digit, Int_t index);
  
  Int_t FindIndex(const AliMUONVDigit& digit) const;
  Int_t FindIndex(Int_t detElemId, Int_t internalManuId, Int_t manuChannel) const;
    
  void ReIndex();
  void ClearIndex();

private:
  TClonesArray* fDigits; ///< collection of digits
  AliMUON2DMap* fMap; //!< index map for fast digit retrieval
  Bool_t fIndexed; //!< whether our internal indices fDEs and fManus are uptodate
  
  ClassDef(AliMUONDigitStoreVImpl,1) // Implementation of AliMUONVDigitStore
};

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