change linkage behavior of contract indices... should be save now
This commit is contained in:
parent
dc436af07d
commit
2a7dd9aa83
6 changed files with 48 additions and 6 deletions
|
@ -15,7 +15,7 @@ include_directories(src)
|
|||
|
||||
add_executable(utest src/unit_test.cc)
|
||||
target_link_libraries(utest ${GTEST_BOTH_LIBRARIES})
|
||||
add_test(AllTests utest)
|
||||
add_test(NAME utest COMMAND utest)
|
||||
|
||||
#install(TARGETS testm DESTINATION install)
|
||||
|
||||
|
|
|
@ -439,6 +439,25 @@ namespace MultiArrayTools
|
|||
}
|
||||
}
|
||||
|
||||
template <typename T, class Range>
|
||||
template <class... NameTypes>
|
||||
ConstMultiArrayOperationRoot<T,Range> MutableMultiArrayBase<T,Range>::operator()(const NameTypes&... str) const
|
||||
{
|
||||
return ConstMultiArrayOperationRoot<T,Range>(*this, Name("master", str...));
|
||||
}
|
||||
|
||||
template <typename T, class Range>
|
||||
template <class NameType>
|
||||
ConstMultiArrayOperationRoot<T,Range> MutableMultiArrayBase<T,Range>::operator()(const NameType& name, bool master) const
|
||||
{
|
||||
//CHECK;
|
||||
if(master){
|
||||
return ConstMultiArrayOperationRoot<T,Range>(*this, name);
|
||||
}
|
||||
else {
|
||||
return operator()(name);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************
|
||||
* MultiArray *
|
||||
|
|
|
@ -186,6 +186,12 @@ namespace MultiArrayTools
|
|||
template <class NameType>
|
||||
MultiArrayOperationRoot<T,Range> operator()(const NameType& name, bool master);
|
||||
|
||||
template <class... NameTypes>
|
||||
ConstMultiArrayOperationRoot<T,Range> operator()(const NameTypes&... str) const;
|
||||
|
||||
template <class NameType>
|
||||
ConstMultiArrayOperationRoot<T,Range> operator()(const NameType& name, bool master) const;
|
||||
|
||||
};
|
||||
|
||||
template <typename T, class Range>
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace MultiArrayTools
|
|||
{
|
||||
return *mIibPtr;
|
||||
}
|
||||
|
||||
|
||||
template <typename T>
|
||||
void MultiArrayOperationBase<T>::freeIndex() const
|
||||
{
|
||||
|
@ -306,6 +306,7 @@ namespace MultiArrayTools
|
|||
template <typename T, class Range>
|
||||
void MultiArrayOperationRoot<T,Range>::linkIndicesTo(IndefinitIndexBase* target) const
|
||||
{
|
||||
MAOB::mIibPtr = &mIndex;
|
||||
MAOB::mIibPtr->linkTo(target);
|
||||
}
|
||||
|
||||
|
@ -553,6 +554,7 @@ namespace MultiArrayTools
|
|||
template <typename T, class Range>
|
||||
void ConstMultiArrayOperationRoot<T,Range>::linkIndicesTo(IndefinitIndexBase* target) const
|
||||
{
|
||||
MAOB::mIibPtr = &mIndex;
|
||||
MAOB::mIibPtr->linkTo(target);
|
||||
}
|
||||
|
||||
|
@ -798,7 +800,8 @@ namespace MultiArrayTools
|
|||
{
|
||||
mBeginIndex.setPos(0);
|
||||
mEndIndex.setPos(mRunIndex.max());
|
||||
linkIndicesTo(&mRunIndex);
|
||||
// DON'T link here !!
|
||||
//linkIndicesTo(&mRunIndex);
|
||||
}
|
||||
|
||||
template <typename T, class ContractOperation, class Range, class... MAOps>
|
||||
|
@ -815,7 +818,8 @@ namespace MultiArrayTools
|
|||
{
|
||||
mBeginIndex.setPos(begin);
|
||||
mEndIndex.setPos(end);
|
||||
linkIndicesTo(&mRunIndex);
|
||||
// DON'T link here !!
|
||||
//linkIndicesTo(&mRunIndex);
|
||||
}
|
||||
|
||||
|
||||
|
@ -897,10 +901,19 @@ namespace MultiArrayTools
|
|||
{
|
||||
return LinkedIndexGetter<sizeof...(MAOps)-1>::getLinked(mArgs, name, nullptr);
|
||||
}
|
||||
|
||||
template <typename T, class ContractOperation, class Range, class... MAOps>
|
||||
void MultiArrayContraction<T,ContractOperation,Range,MAOps...>::setInternalLinks() const
|
||||
{
|
||||
linkIndicesTo(&mRunIndex);
|
||||
}
|
||||
|
||||
template <typename T, class ContractOperation, class Range, class... MAOps>
|
||||
void MultiArrayContraction<T,ContractOperation,Range,MAOps...>::linkIndicesTo(IndefinitIndexBase* target) const
|
||||
{
|
||||
if(target != &mRunIndex){
|
||||
setInternalLinks();
|
||||
}
|
||||
TupleIndicesLinker<sizeof...(MAOps)-1>::linkTupleIndicesTo(mArgs, target);
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,8 @@ namespace MultiArrayTools
|
|||
|
||||
virtual const T& get() const = 0;
|
||||
|
||||
virtual void setInternalLinks() const {}
|
||||
|
||||
virtual void freeIndex() const;
|
||||
|
||||
protected:
|
||||
|
@ -285,7 +287,7 @@ namespace MultiArrayTools
|
|||
auto operator/(const MAOp2& sec) -> decltype(operator()(std::divides<T>(), sec));
|
||||
|
||||
virtual size_t argNum() const override;
|
||||
|
||||
|
||||
virtual IndefinitIndexBase* getLinked(const std::string& name) const override;
|
||||
virtual void linkIndicesTo(IndefinitIndexBase* target) const override;
|
||||
|
||||
|
@ -344,6 +346,8 @@ namespace MultiArrayTools
|
|||
|
||||
template <class MAOp2>
|
||||
auto operator/(const MAOp2& sec) -> decltype(operator()(std::divides<T>(), sec));
|
||||
|
||||
virtual void setInternalLinks() const override;
|
||||
|
||||
virtual size_t argNum() const override;
|
||||
|
||||
|
|
|
@ -194,7 +194,7 @@ namespace MultiArrayTools
|
|||
#ifdef LORENTZ_DIMENSION
|
||||
return LORENTZ_DIMENSION;
|
||||
#else
|
||||
return 1; // 4
|
||||
return 4; // 4
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue