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];
void Idx2Sub(size_t idx, SubscriptT *sub) const
size_t TransposedIdx2Idx(size_t tidx) const
void Extent(const ExtentT &ext)
size_t Sub2Idx(const SubscriptT &sub) const
size_t Sub2TransposedIdx(const SubscriptT &sub) const
void TransposedIdx2Sub(size_t tidx, SubscriptT *sub) const
ArrayArithmetic(const ExtentT &ext)
size_t Idx2TransposedIdx(size_t idx) const
intptr_t Sub2Off(const SubscriptT &sub) const
Point sub(const Point &x, const Point &y)