CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/CondFormats/Calibration/interface/TensorIndex.h

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