IndexProcessor.h
Go to the documentation of this file.
1 #ifndef _tls_ParametricMuonProfileNS_IndexProcessor_h_
2 #define _tls_ParametricMuonProfileNS_IndexProcessor_h_
3 
4 #include <vector>
5 #include <iostream>
6 
7 namespace ParametricMuonProfileNS {
8 
9  template<size_t ADimension>
11  {
12  public:
13  IndexProcessor(const std::vector<size_t>& extent)
14  {
15  fStride[ADimension - 1] = extent[ADimension - 1];
16  for (unsigned char i = 1; i < ADimension; ++i)
17  fStride[ADimension - 1 - i] = extent[ADimension - 1 - i]
18  *fStride[ADimension - i];
19  }
20 
21  inline
22  void
23  Linearize(const size_t* index, size_t& j)
24  const
25  {
26  j = index[ADimension - 1];
27  for (size_t i = 0; i < ADimension - 1; ++i)
28  j += index[i] * fStride[i + 1];
29  }
30 
31  inline
32  void
33  Delinearize(const size_t j, size_t* index)
34  const
35  {
36  size_t l = j;
37  for (size_t i = 0; i < ADimension - 1; ++i)
38  {
39  index[i] = l / fStride[i + 1];
40  l %= fStride[i + 1];
41  }
42  index[ADimension - 1] = l;
43  }
44 
45  protected:
46  size_t fStride[ADimension];
47  };
48 
49 }
50 
51 #endif
IndexProcessor(const std::vector< size_t > &extent)

, generated on Tue Sep 26 2023.