if (i - 1 != begin) providers.add(lastOutput = new PermutatorProvider(lastOutput, Arrays.copyOfRange(indexlessFrom, begin, i), Arrays.copyOfRange(indexlessTo, begin, i))); begin = i; providers.add(lastOutput = new PermutatorProvider(lastOutput, p.from, p.to));
@Override public IndexMappingBuffer take() { if (currentBuffer == null) return null; while (currentProvider == null) { if (!generator.hasNext()) return null; final int[] permutation = generator.next(); final Tensor[] newTo = new Tensor[to.length]; for (int i = 0; i < to.length; ++i) newTo[i] = to[permutation[i]]; currentProvider = new SimpleProductMappingsPort(IndexMappingProvider.Util.singleton(currentBuffer.clone()), from, newTo); final IndexMappingBuffer buffer = currentProvider.take(); if (buffer != null) return buffer; currentProvider = null; } final IndexMappingBuffer buffer = currentProvider.take(); if (buffer == null) { currentProvider = null; return take(); } return buffer; } }