]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Making sorting values optional
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 2 Feb 2007 15:14:57 +0000 (15:14 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 2 Feb 2007 15:14:57 +0000 (15:14 +0000)
MUON/mapping/AliMpArrayI.cxx
MUON/mapping/AliMpArrayI.h

index fe12196e8b9ca44354231a7ba6f0ab999c5e6ca1..ad73de0dc767ce4ba49d04e7877da190c1763c40 100644 (file)
@@ -23,7 +23,6 @@
 // Author:Ivana Hrivnacova; IPN Orsay
 
 #include "AliMpArrayI.h"
-#include "AliMpIntPair.h"
 
 #include "AliLog.h"
 
@@ -32,6 +31,7 @@
 #include <Riostream.h>
 
 #include <stdlib.h>
+#include <limits.h>
 
 /// \cond CLASSIMP
 ClassImp(AliMpArrayI)
@@ -40,10 +40,12 @@ ClassImp(AliMpArrayI)
 const Int_t AliMpArrayI::fgkDefaultSize = 100;
 
 //_____________________________________________________________________________
-AliMpArrayI::AliMpArrayI() 
+AliMpArrayI::AliMpArrayI(Bool_t sort
   : TObject(),
+    fSort(sort),
     fNofValues(0),
-    fValues(fgkDefaultSize)
+    fValues(fgkDefaultSize),
+    fLimits(INT_MIN,INT_MAX)
 {
 /// Standard & default constructor
 
@@ -52,8 +54,10 @@ AliMpArrayI::AliMpArrayI()
 //_____________________________________________________________________________
 AliMpArrayI::AliMpArrayI(TRootIOCtor* /*ioCtor*/) 
   : TObject(),
+    fSort(),
     fNofValues(),
-    fValues()
+    fValues(),
+    fLimits()
 {
 /// IO constructor
 }
@@ -95,24 +99,34 @@ Bool_t AliMpArrayI::Add(Int_t value)
    AliWarningStream() << "Resized array." << endl;
   }
   
-  // Find the position for the new value  
-  Int_t pos = GetPosition(value); 
-   
-  // Move elements 
-  for ( Int_t i=fNofValues; i>=pos; i-- )
-    fValues.AddAt(fValues.At(i), i+1);
-    
+  
+  // The position for the new value  
+  Int_t pos;
+  if ( fSort ) {
+    pos = GetPosition(value);
+
+    // Move elements 
+    for ( Int_t i=fNofValues; i>=pos; i-- )
+      fValues.AddAt(fValues.At(i), i+1);
+  }  
+  else
+    pos = fNofValues;     
+     
   // Add the new value in freed space
   fValues.AddAt(value, pos);  
   ++fNofValues;
   
+  // Update linits
+  if ( value < fLimits.GetFirst() )  fLimits.SetFirst(value);
+  if ( value > fLimits.GetSecond() ) fLimits.SetSecond(value);
+  
   return true;
 }
 
 //_____________________________________________________________________________
 Bool_t AliMpArrayI::Remove(Int_t value)
 {
-/// Add object with its key to the map and arrays
+/// Remove value from the array
   
   // Find the position for the new value  
   Int_t pos = GetPosition(value); 
@@ -166,7 +180,7 @@ Bool_t AliMpArrayI::HasValue(Int_t value) const
 
   if ( ! fNofValues ) return false;
 
-  if ( fValues.At(0) > value || fValues.At(fNofValues-1) < value ) 
+  if ( value < fLimits.GetFirst() || value > fLimits.GetSecond() ) 
     return false;
 
   for ( Int_t i=0; i<fNofValues; i++ )
index 5160b209b41e33ffea7a78d6a5a86b4f01d52602..c3da87f27db8f7557db126c1aa2c3760c3caff2a 100644 (file)
 #ifndef ALI_MP_ARRAY_I_H
 #define ALI_MP_ARRAY_I_H
 
+#include "AliMpIntPair.h"
+
 #include <TObject.h>
 #include <TArrayI.h>
 
-class AliMpIntPair;
-
 class TString;
 
 class AliMpArrayI : public TObject
 {
   public:
-    AliMpArrayI();
+    AliMpArrayI(Bool_t sort = true);
     AliMpArrayI(TRootIOCtor* /*ioCtor*/);
     virtual ~AliMpArrayI();
     
@@ -47,8 +47,10 @@ class AliMpArrayI : public TObject
     static const Int_t    fgkDefaultSize; ///< Default initial size
 
     // data members
-    Int_t    fNofValues; ///< Number of values in the array
-    TArrayI  fValues;    ///< Array of values 
+    Bool_t   fSort;       ///< Option to sort the values
+    Int_t    fNofValues;  ///< Number of values in the array
+    TArrayI  fValues;     ///< Array of values 
+    AliMpIntPair fLimits; ///< The minimum and maximum values in the array
 
   ClassDef(AliMpArrayI,1)  // Helper class for sorted integer array
 };