ROOT logo
#ifndef ALIVECTORSPARSE_H
#define ALIVECTORSPARSE_H

#include <TObject.h>
#include <TMath.h>

/**********************************************************************************************/
/* Sparse vector class, used as row of the AliMatrixSparse class                              */
/*                                                                                            */ 
/* Author: ruben.shahoyan@cern.ch                                                             */
/*                                                                                            */ 
/**********************************************************************************************/

///////////////////////////////////////////////////////////////////////////////////////
class AliVectorSparse : public TObject {
 public:
  AliVectorSparse();
  AliVectorSparse(const AliVectorSparse& src);
  virtual ~AliVectorSparse() {Clear();}
  virtual void Print(Option_t* option="")                 const;
  //
  Int_t     GetNElems()                                   const {return fNElems;}
  UShort_t *GetIndices()                                  const {return fIndex;}
  Double_t *GetElems()                                    const {return fElems;}
  UShort_t& GetIndex(Int_t i)                                   {return fIndex[i];}
  Double_t& GetElem(Int_t i)                              const {return fElems[i];}
  void      Clear(Option_t* option="");
  void      Reset()                                             {memset(fElems,0,fNElems*sizeof(Double_t));}
  void      ReSize(Int_t sz,Bool_t copy=kFALSE);
  void      SortIndices(Bool_t valuesToo=kFALSE);
  void      Add(Double_t *valc,Int_t *indc,Int_t n);
  //
  AliVectorSparse& operator=(const AliVectorSparse& src);
  //
  virtual Double_t         operator()(Int_t ind)         const;
  virtual Double_t&        operator()(Int_t ind);
  virtual void             SetToZero(Int_t ind);
  Double_t                 FindIndex(Int_t ind)          const;
  Double_t&                FindIndexAdd(Int_t ind);
  //
  Int_t     GetLastIndex()                               const {return fIndex[fNElems-1];}
  Double_t  GetLastElem()                                const {return fElems[fNElems-1];}
  Double_t &GetLastElem()                                      {return fElems[fNElems-1];}
  //
 protected:
  Int_t            fNElems;   // Number of elements
  UShort_t*        fIndex;    // Index of stored elems
  Double_t*        fElems;    // pointer on elements
  //
  ClassDef(AliVectorSparse,0)
};


//___________________________________________________
inline Double_t AliVectorSparse::operator()(Int_t ind) const
{
  return FindIndex(ind);
}

//___________________________________________________
inline Double_t& AliVectorSparse::operator()(Int_t ind)
{
  return FindIndexAdd(ind);
}

//////////////////////////////////////////////////////////////////////////////////////

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