CMS 3D CMS Logo

TensorIndex.h
Go to the documentation of this file.
1 #ifndef TensorIndex_h
2 #define TensorIndex_h
3 template <int d1, int d2 = 1, int d3 = 1, int d4 = 1>
16 class TensorIndex {
17 public:
18  enum { SIZE = d1 * d2 * d3 * d4 };
19  enum { LEN1 = d1 };
20  enum { LEN2 = d2 };
21  enum { LEN3 = d3 };
22  enum { LEN4 = d4 };
23 
24  static int indexOf(const int i) { return i; }
25  static int indexOf(const int i, const int j) { return j * d1 + i; }
26  static int indexOf(const int i, const int j, const int k) { return (k * d2 + j) * d1 + i; }
27  static int indexOf(const int i, const int j, const int k, const int l) { return ((l * d3 + k) * d2 + j) * d1 + i; }
28 };
29 
30 template <int d1, int d2 = 1, int d3 = 1, int d4 = 1>
32 public:
33  enum { SIZE = d1 * d2 * d3 * d4 };
34  enum { LEN1 = d1 };
35  enum { LEN2 = d2 };
36  enum { LEN3 = d3 };
37  enum { LEN4 = d4 };
38 
39  static int indexOf(const int i) { return i - 1; }
40  static int indexOf(const int i, const int j) { return j * d1 + i - 1 - d1; }
41  static int indexOf(const int i, const int j, const int k) { return (k * d2 + j) * d1 + i - 1 - d1 - d1 * d2; }
42  static int indexOf(const int i, const int j, const int k, const int l) {
43  return ((l * d3 + k) * d2 + j) * d1 + i - 1 - d1 - d1 * d2 - d1 * d2 * d3;
44  }
45 };
46 #endif
static int indexOf(const int i, const int j, const int k, const int l)
Definition: TensorIndex.h:27
static int indexOf(const int i, const int j, const int k)
Definition: TensorIndex.h:41
static int indexOf(const int i, const int j)
Definition: TensorIndex.h:25
static int indexOf(const int i, const int j)
Definition: TensorIndex.h:40
static int indexOf(const int i, const int j, const int k, const int l)
Definition: TensorIndex.h:42
static int indexOf(const int i)
Definition: TensorIndex.h:39
static int indexOf(const int i, const int j, const int k)
Definition: TensorIndex.h:26
static int indexOf(const int i)
Definition: TensorIndex.h:24
static constexpr float d1