1 #ifndef GfxTL__ARRAYARITHMETIC_HEADER__
2 #define GfxTL__ARRAYARITHMETIC_HEADER__
9 template <
unsigned int DimT>
17 template <
class ExtentT>
23 template <
class ExtentT>
28 for (
unsigned int i = DimT - 1; i != 0; --i)
30 m_fac[i - 1] = m_fac[i] * ext[i];
33 for (
unsigned int i = 0; i < DimT - 1; ++i)
35 m_transFac[i + 1] = m_transFac[i] * ext[i];
39 template <
class SubscriptT>
43 size_t idx =
sub[0] * m_fac[0];
44 for (
unsigned int i = 1; i < DimT; ++i)
46 idx +=
sub[i] * m_fac[i];
51 template <
class SubscriptT>
55 size_t idx =
sub[0] * m_transFac[0];
56 for (
unsigned int i = 1; i < DimT; ++i)
58 idx +=
sub[i] * m_transFac[i];
63 template <
class SubscriptT>
67 intptr_t off =
sub[0] * m_fac[0];
68 for (
unsigned int i = 1; i < DimT; ++i)
70 off +=
sub[i] * m_fac[i];
75 template <
class SubscriptT>
79 for (
unsigned int i = 0; i < DimT; ++i)
81 (*sub)[i] = idx / m_fac[i];
86 template <
class SubscriptT>
90 for (
unsigned int i = DimT - 1; i != -1; --i)
92 (*sub)[i] = tidx / m_transFac[i];
93 tidx %= m_transFac[i];
102 for (
unsigned int i = 0; i < DimT; ++i)
104 size_t j = idx / m_fac[i];
106 tidx += j * m_transFac[i];
116 for (
unsigned int i = DimT - 1; i != -1; --i)
118 size_t j = tidx / m_transFac[i];
119 tidx %= m_transFac[i];
127 size_t m_transFac[DimT];