#include "AliMUON2DMapIterator.h"
#include "AliMUON2DMapIteratorByI.h"
#include "AliMpExMap.h"
+#include "AliMpExMapIterator.h"
//-----------------------------------------------------------------------------
/// \class AliMUON2DMap
ClassImp(AliMUON2DMap)
/// \endcond
-namespace
+const Int_t AliMUON2DMap::fgkOptimalSizeForDEManu = 228;
+
+//_____________________________________________________________________________
+AliMUON2DMap::AliMUON2DMap(TRootIOCtor*)
+: AliMUONVStore(),
+fMap(0x0),
+fOptimizeForDEManu(kFALSE)
{
- //___________________________________________________________________________
- TObject* GetValue(TExMapIter& iter, Int_t& theKey)
- {
- /// return the next value corresponding to theKey in iterator iter
- theKey = -1;
- Long_t key, value;
- Bool_t ok = iter.Next(key,value);
- if (!ok) return 0x0;
- theKey = (Int_t)(key & 0xFFFF);
- return reinterpret_cast<TObject*>(value);
- }
+ /// Root I/O constructor.
}
//_____________________________________________________________________________
AliMUON2DMap::AliMUON2DMap(Bool_t optimizeForDEManu)
: AliMUONVStore(),
- fMap(0x0),
+ fMap(new AliMpExMap),
fOptimizeForDEManu(optimizeForDEManu)
{
/// Default constructor.
- Clear();
+ // hard-coded constant in order not to depend on mapping
+ // if this number ever change, it will not break the code, simply the
+ // automatic resizing will give a warning...
+
+ if ( fOptimizeForDEManu ) fMap->SetSize(fgkOptimalSizeForDEManu);
}
//_____________________________________________________________________________
AliMUON2DMap::AliMUON2DMap(const AliMUON2DMap& other)
: AliMUONVStore(),
-fMap(0x0),
-fOptimizeForDEManu(kFALSE)
+ fMap(new AliMpExMap(*other.fMap)),
+ fOptimizeForDEManu(other.fOptimizeForDEManu)
{
/// Copy constructor.
-
- other.CopyTo(*this);
}
//_____________________________________________________________________________
AliMUON2DMap::operator=(const AliMUON2DMap& other)
{
/// Assignment operator
-
- other.CopyTo(*this);
+ *fMap = *other.fMap;
+ fOptimizeForDEManu = other.fOptimizeForDEManu;
return *this;
}
{
/// Destructor.
/// We delete the map, which will delete the objects, as we're owner.
-
delete fMap;
}
return new AliMUON2DMap(fOptimizeForDEManu);
}
-//_____________________________________________________________________________
-void
-AliMUON2DMap::CopyTo(AliMUON2DMap& dest) const
-{
- /// Copy this into dest.
-
- delete dest.fMap;
- dest.fMap = new AliMpExMap(*fMap);
- dest.fOptimizeForDEManu = fOptimizeForDEManu;
-}
-
//_____________________________________________________________________________
Bool_t
AliMUON2DMap::Add(TObject* object)
{
/// Add object, using the decoding of uniqueID into two ints as the key
+ if (!object) return kFALSE;
UInt_t uniqueID = object->GetUniqueID();
Int_t j = ( uniqueID & 0xFFFF0000 ) >> 16;
Int_t i = ( uniqueID & 0xFFFF);
return Set(i,j,object,kFALSE);
}
+//_____________________________________________________________________________
+TObject*
+AliMUON2DMap::FindObject(UInt_t uid) const
+{
+ /// Return the value at position uid
+
+ Int_t j = ( uid & 0xFFFF0000 ) >> 16;
+ Int_t i = ( uid & 0xFFFF);
+ return FindObject(i,j);
+}
+
//_____________________________________________________________________________
TObject*
AliMUON2DMap::FindObject(Int_t i, Int_t j) const
{
/// Return the value at position (i,j).
-
AliMpExMap* m = static_cast<AliMpExMap*>(fMap->GetValue(i));
- if (m) return m->GetValue(j);
- return 0x0;
+ return m ? m->GetValue(j) : 0x0;
}
//_____________________________________________________________________________
{
// Create and return an iterator on this map
// Returned iterator must be deleted by user.
- if ( fMap )
- {
- return new AliMUON2DMapIterator(fMap);
- }
- return 0x0;
+ return new AliMUON2DMapIterator(*fMap);
}
//_____________________________________________________________________________
{
// Create and return an iterator on this map
// Returned iterator must be deleted by user.
- if ( fMap )
- {
- return new AliMUON2DMapIteratorByI(*fMap,firstI,lastI);
- }
- return 0x0;
+ return new AliMUON2DMapIteratorByI(*fMap,firstI,lastI);
}
//_____________________________________________________________________________
void
AliMUON2DMap::Clear(Option_t*)
{
- /// Reset
- delete fMap;
-
- fMap = new AliMpExMap(kTRUE);
-
- if ( fOptimizeForDEManu )
- {
- fMap->SetSize(228); // hard-coded constant in order not to depend on mapping
- // if this number ever change, it will not break the code, simply the
- // automatic resizing will give a warning...
- }
+ /// Clear memory
+ fMap->Clear();
}
//_____________________________________________________________________________
AliMUON2DMap::GetSize() const
{
/// Return the number of objects we hold
- TExMapIter iter(fMap->GetIterator());
- Int_t i;
+ TIter next(fMap->CreateIterator());
Int_t theSize(0);
+ AliMpExMap* m;
- while ( GetValue(iter,i) )
+ while ( ( m = static_cast<AliMpExMap*>(next()) ) )
{
- theSize += GetSize(i);
+ TIter next2(m->CreateIterator());
+ while ( next2() )
+ {
+ ++theSize;
+ }
}
return theSize;
}
{
/// Return the number of objects we hold
AliMpExMap* m = static_cast<AliMpExMap*>(fMap->GetValue(i));
- if (m)
- {
- return m->GetSize();
- }
- return 0;
+ return m ? m->GetSize() : 0;
}
//_____________________________________________________________________________
TObject* o = fMap->GetValue(i);
if ( !o )
{
- AliMpExMap* m = new AliMpExMap(true);
+ AliMpExMap* m = new AliMpExMap;
if ( fOptimizeForDEManu )
{
m->SetSize(451); // same remark as for the SetSize in ctor...
return kTRUE;
}
-
-
-
-