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

// $Id$

/// \ingroup core
/// \class AliMUON2DMap
/// \brief Basic implementation of AliMUONVStore container using
/// AliMpExMap internally.
///
//  Author Laurent Aphecetche

#ifndef ALIMUON2DMAP_H
#define ALIMUON2DMAP_H

#include "AliMUONVStore.h"

class AliMpExMap;

class AliMUON2DMap : public AliMUONVStore
{
public:
  AliMUON2DMap(TRootIOCtor* ioCtor);
  AliMUON2DMap(Bool_t optimizeForDEManu);  
  AliMUON2DMap(const AliMUON2DMap& other);
  AliMUON2DMap&  operator = (const AliMUON2DMap& other);
  virtual ~AliMUON2DMap();

  virtual Bool_t Add(TObject* object);
  
  /// Mandatory methods from TCollection
  virtual void Clear(Option_t* opt="");
  
  /// Whether the Connect(TTree&) method is implemented
  virtual Bool_t CanConnect() const { return kFALSE; }
  
  virtual AliMUONVStore* Create() const;
  
  /// The returned iterator is owned by the client.
  virtual TIterator* CreateIterator() const;

  /// Iterate on part of the store (only for (i,j) where firstI<=i<=lastI
  TIterator* CreateIterator(Int_t firstI, Int_t lastI) const;

  using AliMUONVStore::FindObject;
  
  virtual TObject* FindObject(Int_t i, Int_t j) const;

  virtual TObject* FindObject(UInt_t uid) const;

  /// Whether our internal storage is optimize to store (detection element id, manu id)  
  Bool_t IsOptimizedForDEManu() const { return fOptimizeForDEManu; }
  
  virtual Int_t GetSize() const;

  virtual Int_t GetSize(Int_t i) const;

private:
  /// Not implemented
  AliMUON2DMap();

  Bool_t Set(Int_t i, Int_t j, TObject* object, Bool_t replace);

  static const Int_t fgkOptimalSizeForDEManu; ///< Optimal size for DEManu

  AliMpExMap* fMap; ///< Our internal map (an AliMpExMap of AliMpExMaps)
  Bool_t fOptimizeForDEManu; ///< whether (i,j) pair is supposed to be (DetElemId,ManuId) (allow us to allocate right amount of memory, that's all it does.
  
  ClassDef(AliMUON2DMap,2) // A 2D container
};

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