multiple range cast in anonymous range
This commit is contained in:
parent
bdabee1335
commit
ae6ec95119
2 changed files with 22 additions and 0 deletions
|
@ -94,6 +94,7 @@ namespace MultiArrayTools
|
|||
const std::vector<std::shared_ptr<RangeBase> >& orig() const;
|
||||
|
||||
void sreplace(const std::shared_ptr<RangeBase> in, size_t num);
|
||||
void sreplace(const std::vector<std::shared_ptr<RangeBase>>& in, size_t num);
|
||||
|
||||
bool isEmpty() const;
|
||||
|
||||
|
|
|
@ -165,6 +165,27 @@ namespace MultiArrayTools
|
|||
mOrig[num] = in;
|
||||
}
|
||||
|
||||
void AnonymousRange::sreplace(const std::vector<std::shared_ptr<RangeBase>>& in, size_t num)
|
||||
{
|
||||
size_t nsize = 1;
|
||||
for(auto& x: in){
|
||||
nsize *= x->size();
|
||||
}
|
||||
assert(mOrig[num]->size() == nsize);
|
||||
auto norig = mOrig;
|
||||
norig.resize(mOrig.size() + in.size() - 1);
|
||||
for(size_t i = 0; i != num; ++i){
|
||||
norig[i] = mOrig[i];
|
||||
}
|
||||
for(size_t i = 0; i != in.size(); ++i){
|
||||
norig[num+i] = in[i];
|
||||
}
|
||||
for(size_t i = num + 1 ; i < mOrig.size(); ++i){
|
||||
norig[in.size()+i-1] = mOrig[i];
|
||||
}
|
||||
mOrig = std::move( norig );
|
||||
}
|
||||
|
||||
const std::vector<std::shared_ptr<RangeBase> >& AnonymousRange::orig() const
|
||||
{
|
||||
return mOrig;
|
||||
|
|
Loading…
Reference in a new issue