check format compatibility
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
bfeda55904
commit
9b706c4ec0
2 changed files with 40 additions and 7 deletions
|
@ -100,7 +100,7 @@ namespace CNORXZ
|
||||||
template <class Index>
|
template <class Index>
|
||||||
COpRoot<T,Index> CArrayBase<T>::operator()(const Sptr<Index>& i) const
|
COpRoot<T,Index> CArrayBase<T>::operator()(const Sptr<Index>& i) const
|
||||||
{
|
{
|
||||||
this->checkFormatCompatibility(toVec(i->deepFormat()));
|
this->checkFormatCompatibility(*i);
|
||||||
return coproot(*this, i);
|
return coproot(*this, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ namespace CNORXZ
|
||||||
inline decltype(auto) CArrayBase<T>::operator()(const SPack<Indices...>& pack) const
|
inline decltype(auto) CArrayBase<T>::operator()(const SPack<Indices...>& pack) const
|
||||||
{
|
{
|
||||||
auto i = mindexPtr(pack);
|
auto i = mindexPtr(pack);
|
||||||
this->checkFormatCompatibility(toVec(i->deepFormat()));
|
this->checkFormatCompatibility(*i);
|
||||||
return coproot(*this, i);
|
return coproot(*this, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ namespace CNORXZ
|
||||||
inline decltype(auto) CArrayBase<T>::operator()(const DPack& pack) const
|
inline decltype(auto) CArrayBase<T>::operator()(const DPack& pack) const
|
||||||
{
|
{
|
||||||
auto i = yindexPtr(pack);
|
auto i = yindexPtr(pack);
|
||||||
this->checkFormatCompatibility(toVec(i->deepFormat()));
|
this->checkFormatCompatibility(*i);
|
||||||
return coproot(*this, i);
|
return coproot(*this, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,6 +142,38 @@ namespace CNORXZ
|
||||||
return begin() + acc.lex();
|
return begin() + acc.lex();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
template <class Acc>
|
||||||
|
void CArrayBase<T>::checkFormatCompatibility(const Acc& acc) const
|
||||||
|
{
|
||||||
|
auto j = begin();
|
||||||
|
CXZ_ASSERT(acc.lmax().val() == j.lmax().val(),
|
||||||
|
"got index of iteration space size = " << acc.lmax().val()
|
||||||
|
<< ", expected size = " << acc.lmax().val());
|
||||||
|
Vector<SizeT> f1 = toVec(acc.deepFormat());
|
||||||
|
Vector<SizeT> f2 = j.deepFormat();
|
||||||
|
std::sort(f1.begin(),f1.end());
|
||||||
|
std::sort(f2.begin(),f2.end());
|
||||||
|
SizeT i1 = 0;
|
||||||
|
SizeT i2 = 0;
|
||||||
|
CXZ_ASSERT(f1[i1] == f2[i2], "obtained format " << toString(f1)
|
||||||
|
<< ", which is incompatible to target format " << toString(f2));
|
||||||
|
++i1;
|
||||||
|
++i2;
|
||||||
|
while(i1 < f1.size() and i2 < f2.size()){
|
||||||
|
if(f1[i1] < f2[i2]) {
|
||||||
|
if(++i1 == f1.size()) break;
|
||||||
|
CXZ_ASSERT(f1[i1] <= f2[i2], "obtained format " << toString(f1)
|
||||||
|
<< ", which is incompatible to target format " << toString(f2));
|
||||||
|
}
|
||||||
|
else if(f1[i1] > f2[i2]) {
|
||||||
|
if(++i2 == f2.size()) break;
|
||||||
|
CXZ_ASSERT(f1[i1] >= f2[i2], "obtained format " << toString(f1)
|
||||||
|
<< ", which is incompatible to target format " << toString(f2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*****************
|
/*****************
|
||||||
* ArrayBase *
|
* ArrayBase *
|
||||||
*****************/
|
*****************/
|
||||||
|
@ -223,7 +255,7 @@ namespace CNORXZ
|
||||||
template <class Index>
|
template <class Index>
|
||||||
OpRoot<T,Index> ArrayBase<T>::operator()(const Sptr<Index>& i)
|
OpRoot<T,Index> ArrayBase<T>::operator()(const Sptr<Index>& i)
|
||||||
{
|
{
|
||||||
this->checkFormatCompatibility(toVec(i->deepFormat()));
|
this->checkFormatCompatibility(*i);
|
||||||
return oproot(*this, i);
|
return oproot(*this, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,7 +264,7 @@ namespace CNORXZ
|
||||||
inline decltype(auto) ArrayBase<T>::operator()(const SPack<Indices...>& pack)
|
inline decltype(auto) ArrayBase<T>::operator()(const SPack<Indices...>& pack)
|
||||||
{
|
{
|
||||||
auto i = mindexPtr(pack);
|
auto i = mindexPtr(pack);
|
||||||
this->checkFormatCompatibility(toVec(i->deepFormat()));
|
this->checkFormatCompatibility(*i);
|
||||||
return oproot(*this, i);
|
return oproot(*this, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,7 +272,7 @@ namespace CNORXZ
|
||||||
inline decltype(auto) ArrayBase<T>::operator()(const DPack& pack)
|
inline decltype(auto) ArrayBase<T>::operator()(const DPack& pack)
|
||||||
{
|
{
|
||||||
auto i = yindexPtr(pack);
|
auto i = yindexPtr(pack);
|
||||||
this->checkFormatCompatibility(toVec(i->deepFormat()));
|
this->checkFormatCompatibility(*i);
|
||||||
return oproot(*this, i);
|
return oproot(*this, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,8 @@ namespace CNORXZ
|
||||||
template <class Acc>
|
template <class Acc>
|
||||||
const_iterator itLexSave(const Acc& acc) const;
|
const_iterator itLexSave(const Acc& acc) const;
|
||||||
|
|
||||||
void checkFormatCompatibility(const Vector<SizeT>& f) const { CXZ_WARNING("FORMAT / BLOCKSIZES!!!"); }
|
template <class Acc>
|
||||||
|
void checkFormatCompatibility(const Acc& acc) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
Loading…
Reference in a new issue