Coverity fix for uninitialized variables and check for returned null value
[u/mrichter/AliRoot.git] / MUON / AliMUON1DMap.cxx
index c97bb5a..f61c6ba 100644 (file)
 // $Id$
 
 #include "AliMUON1DMap.h"
+#include "AliMpExMap.h"
+#include "AliMpExMapIterator.h"
 
 #include "AliLog.h"
-#include "AliMpExMap.h"
 
+//-----------------------------------------------------------------------------
+/// \class AliMUON1DMap
+/// This class is simply a wrapper to an AliMpExMap, offering in addition a
+/// control over the replacement policy when you add
+/// something to it.
+///
+/// \author Laurent Aphecetche
+//-----------------------------------------------------------------------------
+
+/// \cond CLASSIMP
 ClassImp(AliMUON1DMap)
+/// \endcond
+
+//_____________________________________________________________________________
+AliMUON1DMap::AliMUON1DMap(TRootIOCtor*)
+: AliMUONVStore(),
+fMap(0x0)
+{
+  /// I/O ctor
+  
+}
 
 //_____________________________________________________________________________
-AliMUON1DMap::AliMUON1DMap() : AliMUONV1DStore(), fMap(new AliMpExMap(true))
+AliMUON1DMap::AliMUON1DMap(Int_t theSize)
+: AliMUONVStore(),
+  fMap(new AliMpExMap)
 {
+/// Default ctor
+
+  if ( theSize > 0) 
+  {
+    fMap->SetSize(theSize);
+  }
+  fMap->SetOwner(kTRUE);
+}
+
+//_____________________________________________________________________________
+AliMUON1DMap::AliMUON1DMap(const AliMUON1DMap& other)
+: AliMUONVStore(),
+  fMap(new AliMpExMap(*other.fMap))
+{
+/// Copy constructor
+}
+
+//_____________________________________________________________________________
+AliMUON1DMap&
+AliMUON1DMap::operator=(const AliMUON1DMap& other)
+{
+/// Assignment operator
+  *fMap = *other.fMap;
+  return *this;
 }
 
 //_____________________________________________________________________________
 AliMUON1DMap::~AliMUON1DMap()
 {
+/// destructor
   delete fMap;
 }
 
 //_____________________________________________________________________________
-TObject*
-AliMUON1DMap::Get(Int_t detElemId) const
+Bool_t 
+AliMUON1DMap::Add(TObject* object)
 {
-  return fMap->GetValue(detElemId);
+  /// Add an object to this, using uniqueID as the key
+  if (!object) return kFALSE;
+  return Set(object->GetUniqueID(),object);
 }
 
 //_____________________________________________________________________________
-Bool_t
-AliMUON1DMap::IsOwner() const
+void 
+AliMUON1DMap::Clear(Option_t*)
 {
-  return kTRUE;
+  /// Reset
+  fMap->Clear();
 }
 
 //_____________________________________________________________________________
-Bool_t
-AliMUON1DMap::Set(Int_t detElemId, TObject* object, Bool_t replace)
+AliMUON1DMap* 
+AliMUON1DMap::Create() const
 {
-  TObject* o = Get(detElemId);
-  if ( o && !replace )
-  {
-    AliError(Form("Object %p is already there for detElemId %d",o,detElemId));
-    return kFALSE;
-  }
-  if ( o && IsOwner() ) 
-  {
-    delete o;
-  }
-  fMap->Add(detElemId,object);
-  return kTRUE;
+  /// Create an empty clone of this
+  return new AliMUON1DMap(fMap->GetSize());
 }
 
+//_____________________________________________________________________________
+TObject* 
+AliMUON1DMap::FindObject(UInt_t i) const
+{
+/// Get the object located at index i, if it exists, and if i is correct.
+  return fMap->GetValue(i);
+}
 
+//_____________________________________________________________________________
+TObject* 
+AliMUON1DMap::FindObject(Int_t i, Int_t j) const
+{
+  /// Get the object located at index (i,j), if it exists, and if i,j is correct.
+  
+  UInt_t uid = ( ( ( j & 0xFFFF ) << 16 ) | ( i & 0xFFFF ) );
+  
+  return fMap->GetValue(uid);
+}
+
+//_____________________________________________________________________________
+TIterator*
+AliMUON1DMap::CreateIterator() const
+{
+  /// Create and return an iterator on this map
+  /// Returned iterator must be deleted by user.
+  return fMap->CreateIterator();
+}
 
+//_____________________________________________________________________________
+Int_t
+AliMUON1DMap::GetSize() const
+{
+  /// Return the number of objects we hold
+  return fMap->GetSize();
+}
 
+//_____________________________________________________________________________
+Bool_t 
+AliMUON1DMap::Set(Int_t i, TObject* object)
+{
+/// Set the object located at i
+/// If there's already an object at location i,
+/// this method fails and returns kFALSE, otherwise it returns kTRUE
+  
+  TObject* o = FindObject(i);
+  if ( o )
+  {
+    AliError(Form("Object %p is already there for i=%d",o,i));
+    return kFALSE;
+  }
+  fMap->Add(i,object);
+  return kTRUE;
+}