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