]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - OADB/AliOADBContainer.cxx
Coverity fix
[u/mrichter/AliRoot.git] / OADB / AliOADBContainer.cxx
index cf7b3d0c927aef76db27aaf1fc7c51e95f2ca203..ebc999bf5096d2bd12d8f73d8ae29aa63ab52963 100644 (file)
@@ -36,8 +36,8 @@ ClassImp(AliOADBContainer);
 //______________________________________________________________________________
 AliOADBContainer::AliOADBContainer() : 
   TNamed(),
-  fArray(new TObjArray(100)),
-  fDefaultList(new TList()),
+  fArray(0),
+  fDefaultList(0),
   fLowerLimits(),
   fUpperLimits(),
   fEntries(0)
@@ -45,7 +45,7 @@ AliOADBContainer::AliOADBContainer() :
   // Default constructor
 }
 
-AliOADBContainer::AliOADBContainer(char* name) : 
+AliOADBContainer::AliOADBContainer(const char* name) : 
   TNamed(name, "OADBContainer"),
   fArray(new TObjArray(100)),
   fDefaultList(new TList()),
@@ -111,7 +111,7 @@ void AliOADBContainer::AppendObject(TObject* obj, Int_t lower, Int_t upper)
   Int_t index = HasOverlap(lower, upper);
   
   if (index != -1) {
-    AliFatal(Form("Ambiguos validity range (%5d) !\n", index));
+    AliFatal(Form("Ambiguos validity range (%5d, %5.5d-%5.5d) !\n", index,lower,upper));
     return;
   }
   //
@@ -156,8 +156,8 @@ void AliOADBContainer::RemoveObject(Int_t idx)
 void AliOADBContainer::UpdateObject(Int_t idx, TObject* obj, Int_t lower, Int_t upper)
 {
   //
-  // Append a new object to the list 
-  
+  // Update an existing object, at a given position 
+
   // Check that index is inside range
   if (idx < 0 || idx >= fEntries) 
     {
@@ -165,17 +165,26 @@ void AliOADBContainer::UpdateObject(Int_t idx, TObject* obj, Int_t lower, Int_t
       return;
     }
   //
+  // Remove the old object and reset the range
+  //  TObject* obj2 = 
+  fArray->RemoveAt(idx);
+  // don't delete it: if you are updating it may be pointing to the same location of obj...
+  //  delete obj2;
+  fLowerLimits[idx] = -1;
+  fUpperLimits[idx] = -1;
   // Check that there is no overlap with existing run ranges  
   Int_t index = HasOverlap(lower, upper);
   if (index != -1) {
-    AliFatal(Form("Ambiguos validity range (%5d) !\n", index));
+    AliFatal(Form("Ambiguos validity range (%5d, %5.5d-%5.5d) !\n", index,lower,upper));
     return;
   }
   //
-  // Add object
+  // Add object at the same position
+  //printf("idx %d obj %llx\n", idx, obj);
   fLowerLimits[idx] = lower;
   fUpperLimits[idx] = upper;
   fArray->AddAt(obj, idx);
+
 }
     
  
@@ -195,6 +204,7 @@ Int_t AliOADBContainer::GetIndexForRun(Int_t run) const
 {
   //
   // Find the index for a given run 
+  
   Int_t found = 0;
   Int_t index = -1;
   for (Int_t i = 0; i < fEntries; i++) 
@@ -215,7 +225,7 @@ Int_t AliOADBContainer::GetIndexForRun(Int_t run) const
   return index;
 }
 
-TObject* AliOADBContainer::GetObject(Int_t run, char* def) const
+TObject* AliOADBContainer::GetObject(Int_t run, const char* def) const
 {
   // Return object for given run or default if not found
   TObject* obj = 0;
@@ -240,16 +250,17 @@ TObject* AliOADBContainer::GetObjectByIndex(Int_t run) const
   return (fArray->At(run));
 }
 
-void AliOADBContainer::WriteToFile(char* fname) const
+void AliOADBContainer::WriteToFile(const char* fname) const
 {
   //
   // Write object to file
-  TFile* f = new TFile(fname, "recreate");
+  TFile* f = new TFile(fname, "update");
   Write();
+  f->Purge();
   f->Close();
 }
 
-Int_t AliOADBContainer::InitFromFile(char* fname, char* key)
+Int_t AliOADBContainer::InitFromFile(const char* fname, const char* key)
 {
     // 
     // Initialize object from file
@@ -262,7 +273,10 @@ Int_t AliOADBContainer::InitFromFile(char* fname, char* key)
        AliError("Object not found in file \n");        
        return 1;
     }
-    
+
+    SetName(cont->GetName());
+    SetTitle(cont->GetTitle());
+
     fEntries = cont->GetNumberOfEntries();
     fLowerLimits.Set(fEntries);
     fUpperLimits.Set(fEntries);
@@ -271,7 +285,7 @@ Int_t AliOADBContainer::InitFromFile(char* fname, char* key)
        fUpperLimits[i] = cont->UpperLimit(i);
        fArray->AddAt(cont->GetObjectByIndex(i), i);
     }
-
+    if (!fDefaultList) fDefaultList = new TList(); 
     TIter next(cont->GetDefaultList());
     TObject* obj;
     while((obj = next())) fDefaultList->Add(obj);
@@ -285,6 +299,8 @@ void AliOADBContainer::List()
 {
   //
   // List Objects
+  printf("Entries %d\n", fEntries);
+  
   for (Int_t i = 0; i < fEntries; i++) {
     printf("Lower %5d Upper %5d \n", fLowerLimits[i], fUpperLimits[i]);
     (fArray->At(i))->Dump();
@@ -295,7 +311,7 @@ void AliOADBContainer::List()
 
 }
 
-Int_t AliOADBContainer::HasOverlap(Int_t lower, Int_t upper)
+Int_t AliOADBContainer::HasOverlap(Int_t lower, Int_t upper) const
 {
   //
   // Checks for overlpapping validity regions