CellVectorMapMap decompose(Tensor input, SplitHow how) {
            var iter = input.cellIterator();
            Label[] commonLabels = new Label[(int)how.numCommon()];
            Label[] separateLabels = new Label[(int)how.numSeparate()];
            CellVectorMapMap result = new CellVectorMapMap();
            while (iter.hasNext()) {
                var cell = iter.next();
                var addr = cell.getKey();
                long ccDimIndex = 0;
                int commonIdx = 0;
                int separateIdx = 0;
                for (int i = 0; i < how.handleDims.size(); i++) {
                    switch (how.handleDims.get(i)) {
                        case common -> commonLabels[commonIdx++] = addr.objectLabel(i);
                        case separate -> separateLabels[separateIdx++] = addr.objectLabel(i);
                        case concat -> ccDimIndex = addr.numericLabel(i);
                        default -> throw new IllegalArgumentException("cannot handle: " + how.handleDims.get(i));
                    }
                }
                TensorAddress commonAddr = TensorAddressAny.ofUnsafe(commonLabels);
                TensorAddress separateAddr = TensorAddressAny.ofUnsafe(separateLabels);
                result.lookupCreate(commonAddr).lookupCreate(separateAddr).setValue((int)ccDimIndex, cell.getValue());
            }
            return result;
        }
Maps the content in the given list to the given array, using the given index map.

@return true if the mapping was successful, false if one of the destination positions was
        occupied by a different value
vespajlib/src/main/java/com/yahoo/tensor/functions/Concat.java