Go to the documentation of this file.00001 #ifndef TensorIndex_h
00002 #define TensorIndex_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 template <int d1,int d2=1,int d3=1,int d4=1>
00016 class TensorIndex {
00017 public:
00018 enum {SIZE = d1*d2*d3*d4 };
00019 enum {LEN1 = d1 };
00020 enum {LEN2 = d2 };
00021 enum {LEN3 = d3 };
00022 enum {LEN4 = d4 };
00023
00024 static int indexOf(const int i) {
00025 return i;
00026 }
00027 static int indexOf(const int i,const int j) {
00028 return j*d1 + i;
00029 }
00030 static int indexOf(const int i,const int j, const int k) {
00031 return (k*d2 + j)*d1 + i;
00032 }
00033 static int indexOf(const int i,const int j, const int k,const int l) {
00034 return ((l*d3 + k)*d2 + j)*d1 + i;
00035 }
00036 };
00037
00038 template <int d1,int d2=1,int d3=1,int d4=1>
00039 class TensorIndex_base1 {
00040 public:
00041 enum {SIZE = d1*d2*d3*d4 };
00042 enum {LEN1 = d1 };
00043 enum {LEN2 = d2 };
00044 enum {LEN3 = d3 };
00045 enum {LEN4 = d4 };
00046
00047 static int indexOf(const int i) {
00048 return i -1;
00049 }
00050 static int indexOf(const int i,const int j) {
00051 return j*d1 + i -1 -d1;
00052 }
00053 static int indexOf(const int i,const int j, const int k) {
00054 return (k*d2 + j)*d1 + i -1 -d1 -d1*d2;
00055 }
00056 static int indexOf(const int i,const int j, const int k,const int l) {
00057 return ((l*d3 + k)*d2 + j)*d1 + i -1 -d1 -d1*d2 - d1*d2*d3;
00058 }
00059 };
00060 #endif