00001 #ifndef TensorIndex_h 00002 #define TensorIndex_h 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