📄 interlace.cc
字号:
template<class T_numtype, int N_rank>
void allocateArrays(const TinyVector<int,N_rank>& shape,
Array<T_numtype,N_rank>& a1, Array<T_numtype,N_rank>& a2)
{
#ifdef BZ_INTERLACE_ARRAYS
interlaceArrays(shape, a1, a2);
#else
a1.resize(shape);
a2.resize(shape);
#endif
}
template<class T_numtype, int N_rank>
void allocateArrays(const TinyVector<int,N_rank>& shape,
Array<T_numtype,N_rank>& a1, Array<T_numtype,N_rank>& a2,
Array<T_numtype,N_rank>& a3)
{
#ifdef BZ_INTERLACE_ARRAYS
interlaceArrays(shape, a1, a2, a3);
#else
a1.resize(shape);
a2.resize(shape);
a3.resize(shape);
#endif
}
template<class T_numtype, int N_rank>
void allocateArrays(const TinyVector<int,N_rank>& shape,
Array<T_numtype,N_rank>& a1, Array<T_numtype,N_rank>& a2,
Array<T_numtype,N_rank>& a3, Array<T_numtype,N_rank>& a4)
{
#ifdef BZ_INTERLACE_ARRAYS
interlaceArrays(shape, a1, a2, a3, a4);
#else
a1.resize(shape);
a2.resize(shape);
a3.resize(shape);
a4.resize(shape);
#endif
}
template<class T_numtype, int N_rank>
void allocateArrays(const TinyVector<int,N_rank>& shape,
Array<T_numtype,N_rank>& a1, Array<T_numtype,N_rank>& a2,
Array<T_numtype,N_rank>& a3, Array<T_numtype,N_rank>& a4,
Array<T_numtype,N_rank>& a5)
{
#ifdef BZ_INTERLACE_ARRAYS
interlaceArrays(shape, a1, a2, a3, a4, a5);
#else
a1.resize(shape);
a2.resize(shape);
a3.resize(shape);
a4.resize(shape);
a5.resize(shape);
#endif
}
template<class T_numtype, int N_rank>
void allocateArrays(const TinyVector<int,N_rank>& shape,
Array<T_numtype,N_rank>& a1, Array<T_numtype,N_rank>& a2,
Array<T_numtype,N_rank>& a3, Array<T_numtype,N_rank>& a4,
Array<T_numtype,N_rank>& a5, Array<T_numtype,N_rank>& a6)
{
#ifdef BZ_INTERLACE_ARRAYS
interlaceArrays(shape, a1, a2, a3, a4, a5, a6);
#else
a1.resize(shape);
a2.resize(shape);
a3.resize(shape);
a4.resize(shape);
a5.resize(shape);
a6.resize(shape);
#endif
}
template<class T_numtype, int N_rank>
void allocateArrays(const TinyVector<int,N_rank>& shape,
Array<T_numtype,N_rank>& a1, Array<T_numtype,N_rank>& a2,
Array<T_numtype,N_rank>& a3, Array<T_numtype,N_rank>& a4,
Array<T_numtype,N_rank>& a5, Array<T_numtype,N_rank>& a6,
Array<T_numtype,N_rank>& a7)
{
#ifdef BZ_INTERLACE_ARRAYS
interlaceArrays(shape, a1, a2, a3, a4, a5, a6, a7);
#else
a1.resize(shape);
a2.resize(shape);
a3.resize(shape);
a4.resize(shape);
a5.resize(shape);
a6.resize(shape);
a7.resize(shape);
#endif
}
template<class T_numtype, int N_rank>
void allocateArrays(const TinyVector<int,N_rank>& shape,
Array<T_numtype,N_rank>& a1, Array<T_numtype,N_rank>& a2,
Array<T_numtype,N_rank>& a3, Array<T_numtype,N_rank>& a4,
Array<T_numtype,N_rank>& a5, Array<T_numtype,N_rank>& a6,
Array<T_numtype,N_rank>& a7, Array<T_numtype,N_rank>& a8)
{
#ifdef BZ_INTERLACE_ARRAYS
interlaceArrays(shape, a1, a2, a3, a4, a5, a6, a7, a8);
#else
a1.resize(shape);
a2.resize(shape);
a3.resize(shape);
a4.resize(shape);
a5.resize(shape);
a6.resize(shape);
a7.resize(shape);
a8.resize(shape);
#endif
}
template<class T_numtype, int N_rank>
void allocateArrays(const TinyVector<int,N_rank>& shape,
Array<T_numtype,N_rank>& a1, Array<T_numtype,N_rank>& a2,
Array<T_numtype,N_rank>& a3, Array<T_numtype,N_rank>& a4,
Array<T_numtype,N_rank>& a5, Array<T_numtype,N_rank>& a6,
Array<T_numtype,N_rank>& a7, Array<T_numtype,N_rank>& a8,
Array<T_numtype,N_rank>& a9)
{
#ifdef BZ_INTERLACE_ARRAYS
interlaceArrays(shape, a1, a2, a3, a4, a5, a6, a7, a8, a9);
#else
a1.resize(shape);
a2.resize(shape);
a3.resize(shape);
a4.resize(shape);
a5.resize(shape);
a6.resize(shape);
a7.resize(shape);
a8.resize(shape);
a9.resize(shape);
#endif
}
template<class T_numtype, int N_rank>
void allocateArrays(const TinyVector<int,N_rank>& shape,
Array<T_numtype,N_rank>& a1, Array<T_numtype,N_rank>& a2,
Array<T_numtype,N_rank>& a3, Array<T_numtype,N_rank>& a4,
Array<T_numtype,N_rank>& a5, Array<T_numtype,N_rank>& a6,
Array<T_numtype,N_rank>& a7, Array<T_numtype,N_rank>& a8,
Array<T_numtype,N_rank>& a9, Array<T_numtype,N_rank>& a10)
{
#ifdef BZ_INTERLACE_ARRAYS
interlaceArrays(shape, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
#else
a1.resize(shape);
a2.resize(shape);
a3.resize(shape);
a4.resize(shape);
a5.resize(shape);
a6.resize(shape);
a7.resize(shape);
a8.resize(shape);
a9.resize(shape);
a10.resize(shape);
#endif
}
template<class T_numtype, int N_rank>
void allocateArrays(const TinyVector<int,N_rank>& shape,
Array<T_numtype,N_rank>& a1, Array<T_numtype,N_rank>& a2,
Array<T_numtype,N_rank>& a3, Array<T_numtype,N_rank>& a4,
Array<T_numtype,N_rank>& a5, Array<T_numtype,N_rank>& a6,
Array<T_numtype,N_rank>& a7, Array<T_numtype,N_rank>& a8,
Array<T_numtype,N_rank>& a9, Array<T_numtype,N_rank>& a10,
Array<T_numtype,N_rank>& a11)
{
#ifdef BZ_INTERLACE_ARRAYS
interlaceArrays(shape, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
#else
a1.resize(shape);
a2.resize(shape);
a3.resize(shape);
a4.resize(shape);
a5.resize(shape);
a6.resize(shape);
a7.resize(shape);
a8.resize(shape);
a9.resize(shape);
a10.resize(shape);
a11.resize(shape);
#endif
}
// NEEDS_WORK -- allocateArrays for TinyVector<Range,N_rank>
// This constructor is used to create interlaced arrays.
template<class T_numtype, int N_rank>
Array<T_numtype,N_rank>::Array(const TinyVector<int,N_rank-1>& shape,
int lastExtent, const GeneralArrayStorage<N_rank>& storage)
: storage_(storage)
{
// Create an array with the given shape, plus an extra dimension
// for the number of arrays being allocated. This extra dimension
// must have minor storage order.
if (ordering(0) == 0)
{
// Column major storage order (or something like it)
length_[0] = lastExtent;
storage_.setBase(0,0);
for (int i=1; i < N_rank; ++i)
length_[i] = shape[i-1];
}
else if (ordering(0) == N_rank-1)
{
// Row major storage order (or something like it)
for (int i=0; i < N_rank-1; ++i)
length_[i] = shape[i];
length_[N_rank-1] = lastExtent;
storage_.setBase(N_rank-1, 0);
}
else {
BZPRECHECK(0, "Used allocateArrays() with a peculiar storage format");
}
setupStorage(N_rank-1);
}
// NEEDS_WORK -- see note about TinyVector<Range,N> in <blitz/arrayshape.h>
#if 0
template<class T_numtype, int N_rank>
Array<T_numtype,N_rank>::Array(const TinyVector<Range,N_rank-1>& shape,
int lastExtent, const GeneralArrayStorage<N_rank>& storage)
: storage_(storage)
{
#ifdef BZ_DEBUG
for (int i=0; i < N_rank; ++i)
BZPRECHECK(shape[i].isAscendingContiguous(),
"In call to allocateArrays(), a Range object is not ascending" << endl
<< "contiguous: " << shape[i] << endl);
#endif
if (ordering(0) == 0)
{
// Column major storage order (or something like it)
length_[0] = lastExtent;
storage_.setBase(0,0);
for (int i=1; i < N_rank; ++i)
{
length_[i] = shape[i-1].length();
storage_.setBase(i, shape[i-1].first());
}
}
else if (ordering(0) == N_rank-1)
{
// Row major storage order (or something like it)
for (int i=0; i < N_rank-1; ++i)
{
length_[i] = shape[i];
storage_.setBase(i, shape[i].first());
}
length_[N_rank-1] = lastExtent;
storage_.setBase(N_rank-1, 0);
}
else {
BZPRECHECK(0, "Used allocateArrays() with a peculiar storage format");
}
setupStorage(N_rank-1);
}
#endif
BZ_NAMESPACE_END
#endif // BZ_ARRAYINTER_CC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -