PlayaLoadableVector.hpp

00001 /* @HEADER@ */
00002 //   
00003  /* @HEADER@ */
00004 
00005 #ifndef PLAYA_LOADABLEVECTOR_HPP
00006 #define PLAYA_LOADABLEVECTOR_HPP
00007 
00008 #include "PlayaDefs.hpp"
00009 
00010 namespace Playa
00011 {
00036 template <class Scalar>
00037 class LoadableVector 
00038 {
00039 public:
00041   virtual ~LoadableVector() {;}
00042 
00044   virtual void setElement(int globalIndex, const Scalar& value) = 0 ;
00045 
00048   virtual void addToElement(int globalIndex, const Scalar& value) = 0 ;
00049 
00051   virtual void setElements(int numElems, 
00052     const int* globalIndices, 
00053     const Scalar* values) ;
00054 
00056   virtual void addToElements(int numElems, 
00057     const int* globalIndices, 
00058     const Scalar* values);
00059 
00063   virtual void finalizeAssembly() {;}
00064 };
00065 
00066 /* Default implementation of setElements makes multiple calls to
00067  * setElement(). If at all possible, this should be overridden
00068  * with a method specialized to the underlying type.  */
00069 template <class Scalar> 
00070 inline void LoadableVector<Scalar>::setElements(int numElems, 
00071   const int* globalIndices, 
00072   const Scalar* values)
00073 {
00074   for (int i=0; i<numElems; i++)
00075   {
00076     setElement(globalIndices[i], values[i]);
00077   }
00078 }
00079 
00080 /* Default implementation of addToElements makes multiple calls to
00081  * addToElement(). If at all possible, this should be overridden
00082  * with a method specialized to the underlying type.  */
00083 template <class Scalar> 
00084 inline void LoadableVector<Scalar>::addToElements(int numElems, 
00085   const int* globalIndices, 
00086   const Scalar* values)
00087 {
00088   for (int i=0; i<numElems; i++)
00089   {
00090     addToElement(globalIndices[i], values[i]);
00091   }
00092 }
00093 
00094   
00095   
00096 }
00097 
00098 #endif

doxygen