diff --git a/src/index_base.h b/src/index_base.h index 86ace64..7466107 100644 --- a/src/index_base.h +++ b/src/index_base.h @@ -30,7 +30,7 @@ namespace MultiArrayTools virtual size_t dim() const = 0; virtual size_t pos() const; // = mPos; implement !!! - + virtual const std::string& name() const; virtual void name(const std::string& str); virtual void name(const Name& nm); diff --git a/src/multi_range.cc b/src/multi_range.cc index 551cd17..9f377b6 100644 --- a/src/multi_range.cc +++ b/src/multi_range.cc @@ -57,8 +57,8 @@ namespace MultiArrayTools template static size_t evaluate(const MultiIndex& index) { - //const auto& subIndex = index.getIndex(); - return Evaluation::evaluate(index) * index.getIndex().size() + index.getIndex().pos(); + const IndefinitIndexBase& subIndex = IndexGetter::getIndex(index, N); + return Evaluation::evaluate(index) * subIndex.max() + subIndex.pos(); } }; @@ -68,8 +68,8 @@ namespace MultiArrayTools template static size_t evaluate(const MultiIndex& index) { - //const auto& subIndex = index.getIndex<0>(); - return index.getIndex<0>().pos(); + const IndefinitIndexBase& subIndex = IndexGetter<0>::getIndex(index, 0); + return subIndex.pos(); } }; @@ -156,7 +156,7 @@ namespace MultiArrayTools IndefinitIndexBase& MultiIndex::operator=(size_t pos) { IIB::setPos( pos ); - setIndexPack(mIPack, pos); // -> implement !!! + //setIndexPack(mIPack, pos); // -> implement !!! return *this; } @@ -207,11 +207,11 @@ namespace MultiArrayTools template bool MultiIndex::link(IndefinitIndexBase* toLink) { - if(toLink->rangeType() != IIB::rangeType() and toLink->name() == IIB::name()){ + if(toLink->rangeType() != rangeType() and toLink->name() == IIB::name()){ // throw !! } - if(toLink->rangeType() == IIB::rangeType() and toLink->name() == IIB::name()){ + if(toLink->rangeType() == rangeType() and toLink->name() == IIB::name()){ if(IIB::mLinked == toLink){ return true; // dont link twice the same } @@ -230,7 +230,7 @@ namespace MultiArrayTools template template - auto MultiIndex::getIndex() -> decltype(std::get(mIPack))& + auto MultiIndex::getIndex() -> decltype(std::get(mIPack)) { return std::get(mIPack); } @@ -238,7 +238,7 @@ namespace MultiArrayTools template template auto MultiIndex::getIndex() const -> - const decltype(std::get(mIPack))& + const decltype(std::get(mIPack)) { return std::get(mIPack); } diff --git a/src/multi_range.h b/src/multi_range.h index ec7c010..d3493cc 100644 --- a/src/multi_range.h +++ b/src/multi_range.h @@ -44,10 +44,10 @@ namespace MultiArrayTools virtual MultiRangeType rangeType() const override; template - auto getIndex() -> decltype(std::get(mIPack))&; + auto getIndex() -> decltype(std::get(mIPack)); template - auto getIndex() const -> const decltype(std::get(mIPack))&; + auto getIndex() const -> const decltype(std::get(mIPack)); IndefinitIndexBase& get(size_t n); const IndefinitIndexBase& get(size_t n) const;