im com (re-enabling oputest)
This commit is contained in:
parent
c674c541a1
commit
bcc6b98882
5 changed files with 64 additions and 10 deletions
|
@ -254,7 +254,7 @@ namespace MultiArrayTools
|
|||
std::tuple<Ops...> mOps;
|
||||
|
||||
public:
|
||||
typedef decltype(PackNum<sizeof...(Ops)-1>::mkSteps(0, mOps)) ETuple;
|
||||
typedef decltype(PackNum<sizeof...(Ops)-1>::template mkSteps<Ops...>(0, mOps)) ETuple;
|
||||
|
||||
Operation(const Ops&... ops);
|
||||
|
||||
|
@ -469,7 +469,7 @@ namespace MultiArrayTools
|
|||
template <typename T, class... Ranges>
|
||||
MExt<void> ConstOperationRoot<T,Ranges...>::rootSteps(std::intptr_t iPtrNum) const
|
||||
{
|
||||
return MExt<void>(0u); // !!!!!!
|
||||
return MExt<void>(getStepSize( getRootIndices( mIndex->info() ), iPtrNum ));
|
||||
}
|
||||
|
||||
|
||||
|
@ -520,7 +520,7 @@ namespace MultiArrayTools
|
|||
template <typename T, class... Ranges>
|
||||
MExt<void> OperationRoot<T,Ranges...>::rootSteps(std::intptr_t iPtrNum) const
|
||||
{
|
||||
return MExt<void>(0u); // !!!!!!
|
||||
return MExt<void>(getStepSize( getRootIndices( mIndex->info() ), iPtrNum ));
|
||||
}
|
||||
|
||||
template <typename T, class... Ranges>
|
||||
|
|
|
@ -59,7 +59,7 @@ namespace MultiArrayHelper
|
|||
}
|
||||
|
||||
template <class... Ops>
|
||||
static auto mkSteps(std::intptr_t ii, const std::tuple<Ops const&...>& otp)
|
||||
static auto mkSteps(std::intptr_t ii, const std::tuple<Ops...>& otp)
|
||||
-> decltype(together(PackNum<N-1>::mkSteps(ii, otp), std::get<N>(otp).rootSteps(ii)))
|
||||
{
|
||||
return together(PackNum<N-1>::mkSteps(ii, otp), std::get<N>(otp).rootSteps(ii) );
|
||||
|
@ -130,7 +130,7 @@ namespace MultiArrayHelper
|
|||
}
|
||||
|
||||
template <class... Ops>
|
||||
static auto mkSteps(std::intptr_t ii, const std::tuple<Ops const&...>& otp)
|
||||
static auto mkSteps(std::intptr_t ii, const std::tuple<Ops...>& otp)
|
||||
-> decltype(std::get<0>(otp).rootSteps(ii))
|
||||
{
|
||||
return std::get<0>(otp).rootSteps(ii);
|
||||
|
|
|
@ -73,13 +73,15 @@ namespace MultiArrayTools
|
|||
|
||||
void print(size_t offset = 0) const { THIS().print(offset); }
|
||||
|
||||
IndexInfo info() const { return IndexInfo(THIS()); }
|
||||
|
||||
// CHECK / IMPLEMENT !!!!!!
|
||||
template <class Expr>
|
||||
auto ifor(const Expr&& ex) const -> decltype(THIS().template ifor<Expr>(ex))
|
||||
auto ifor(const Expr ex) const -> decltype(THIS().template ifor<Expr>(ex))
|
||||
{ return THIS().template ifor<Expr>(ex); }
|
||||
|
||||
template <class Expr>
|
||||
auto iforh(const Expr&& ex) const -> decltype(THIS().template iforh<Expr>(ex))
|
||||
auto iforh(const Expr ex) const -> decltype(THIS().template iforh<Expr>(ex))
|
||||
{ return THIS().template iforh<Expr>(ex); }
|
||||
|
||||
private:
|
||||
|
|
|
@ -70,5 +70,53 @@ namespace MultiArrayTools
|
|||
{
|
||||
return mType;
|
||||
}
|
||||
|
||||
|
||||
std::vector<IndexInfo> getRootIndices(const IndexInfo& info)
|
||||
{
|
||||
std::vector<IndexInfo> out;
|
||||
out.reserve(info.dim());
|
||||
|
||||
if(info.type() == IndexType::SINGLE){
|
||||
out.push_back(info);
|
||||
}
|
||||
else {
|
||||
for(size_t i = 0; i != info.dim(); ++i){
|
||||
auto vv = getRootIndices(*info.getPtr(i));
|
||||
out.insert(out.end(), vv.begin(), vv.end());
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
size_t getStepSize(const std::vector<IndexInfo>& iv, const IndexInfo& j)
|
||||
{
|
||||
size_t ss = 1;
|
||||
auto ii = iv.end() - 1;
|
||||
auto end = iv.begin();
|
||||
while(*ii != j){
|
||||
ss *= ii->max();
|
||||
--ii;
|
||||
if(ii == end){
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ss;
|
||||
}
|
||||
|
||||
size_t getStepSize(const std::vector<IndexInfo>& iv, std::intptr_t j)
|
||||
{
|
||||
size_t ss = 1;
|
||||
auto ii = iv.end() - 1;
|
||||
auto end = iv.begin();
|
||||
while(ii->getPtrNum() != j){
|
||||
ss *= ii->max();
|
||||
--ii;
|
||||
if(ii == end){
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ss;
|
||||
}
|
||||
|
||||
} // end namespace MultiArrayTools
|
||||
|
|
|
@ -20,8 +20,8 @@ namespace MultiArrayTools
|
|||
|
||||
IndexInfo(IndexInfo&& in) = default;
|
||||
IndexInfo& operator=(IndexInfo&& in) = default;
|
||||
//IndexInfo(const IndexInfo& in) = default;
|
||||
//IndexInfo& operator=(const IndexInfo& in) = default;
|
||||
IndexInfo(const IndexInfo& in) = default;
|
||||
IndexInfo& operator=(const IndexInfo& in) = default;
|
||||
|
||||
template <class IndexClass>
|
||||
IndexInfo(const IndexClass& ind, size_t stepSize = 1);
|
||||
|
@ -76,7 +76,11 @@ namespace MultiArrayTools
|
|||
return *this;
|
||||
}
|
||||
|
||||
|
||||
std::vector<IndexInfo> getRootIndices(const IndexInfo& info);
|
||||
|
||||
size_t getStepSize(const std::vector<IndexInfo>& iv, const IndexInfo& j);
|
||||
|
||||
size_t getStepSize(const std::vector<IndexInfo>& iv, std::intptr_t j);
|
||||
} // end namespace MultiArrayTools
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue