AMIInterpolation::append has many list resizing
In AMIInterpolation::append the updated maps are constructed by append/resizing two labelList entries.
This initial bookkeeping could be easily handled as a set of labelRanges. For example,
labelList mapMap, newMapMap;
{
List<labelRange> mapMapRanges(srcSubMap.size());
List<labelRange> newMapMapRanges(srcSubMap.size());
label total = 0;
label total1 = 0;
label total2 = 0;
forAll(srcSubMap, proci)
{
const label len1 = srcConstructMap[proci].size();
const label len2 = newSrcConstructMap[proci].size();
mapMapRanges[proci] = labelRange(total, len1);
total += len1;
total1 += len1;
newMapMapRanges[proci] = labelRange(total, len2);
total += len2;
total2 += len2;
}
mapMap.resize(total1);
newMapMap.resize(total2);
total = 0;
for (const labelRange& range : mapMapRanges)
{
const label beg = range.start();
const label len = range.size();
labelList::subList slice(mapMap.slice(total, len);
ListOps::identity(slice, beg);
total += len;
}
total = 0;
for (const labelRange& range : newMapMapRanges)
{
const label beg = range.start();
const label len = range.size();
labelList::subList slice(newMapMap.slice(total, len);
ListOps::identity(slice, beg);
total += len;
}
}