00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 #ifndef SUNDANCE_ARRAYOFTUPLES_H
00032 #define SUNDANCE_ARRAYOFTUPLES_H
00033 
00034 #include "Teuchos_Array.hpp"
00035 
00036 namespace Sundance
00037 {
00038   using namespace Teuchos;
00039 
00040 
00041 
00042 
00043 
00044   template<class T>
00045     class ArrayOfTuples
00046     {
00047     public:
00048 
00049       ArrayOfTuples();
00050 
00051 
00052 
00053       ArrayOfTuples(int tupleSize);
00054 
00055 
00056       ArrayOfTuples(int numTuples, int tupleSize);
00057 
00058 
00059       int length() const {return numTuples_;}
00060 
00061 
00062       int tupleSize() const {return tupleSize_;}
00063 
00064 
00065       void resize(int newSize) {
00066         numTuples_ = newSize;
00067         data_.resize(numTuples_*tupleSize_);
00068       }
00069 
00070 
00071       void resize(int newSize, int newTupleSize) 
00072         {
00073         numTuples_ = newSize;
00074         tupleSize_ = newTupleSize;
00075         data_.resize(numTuples_*tupleSize_);
00076         }
00077 
00078 
00079       void reserve(int newSize) {data_.reserve(newSize*tupleSize_);}
00080 
00081 
00082       void setTupleSize(int tupleSize) {tupleSize_ = tupleSize;}
00083 
00084 
00085       const T& value(int i, int j) const {return data_[i*tupleSize_+j];}
00086 
00087 
00088       T& value(int i, int j) {return data_[i*tupleSize_+j];}
00089 
00090 
00091       void append(const Array<T>& x);
00092 
00093 
00094       void append(const T* x, int n);
00095 
00096     private:
00097 
00098       int numTuples_;
00099       int tupleSize_;
00100 
00101       Array<T> data_;
00102 
00103     };
00104 
00105   template<class T> inline ArrayOfTuples<T>::ArrayOfTuples()
00106     : numTuples_(0), tupleSize_(0), data_()
00107     {;}
00108 
00109   template<class T> inline ArrayOfTuples<T>::ArrayOfTuples(int tupleSize)
00110     : numTuples_(0), tupleSize_(tupleSize), data_()
00111     {;}
00112 
00113   template<class T> inline ArrayOfTuples<T>::ArrayOfTuples(int numTuples, int tupleSize)
00114     : numTuples_(numTuples), tupleSize_(tupleSize), data_(numTuples*tupleSize)
00115     {;}
00116 
00117   template<class T> inline void ArrayOfTuples<T>::append(const Array<T>& x)
00118     {
00119       for (int i=0; i<x.length(); i++)
00120         {
00121           data_.append(x[i]);
00122         }
00123       numTuples_++;
00124     }
00125 
00126   template<class T> inline void ArrayOfTuples<T>::append(const T* x, int n)
00127     {
00128       for (int i=0; i<n; i++)
00129         {
00130           data_.append(x[i]);
00131         }
00132       numTuples_++;
00133     }
00134 
00135 
00136 }
00137 
00138 #endif