static OutputToInputMap createDimensionMap(const Dimension& outputSize, const Dimension& inputSize, const Dimension& inputStride) { size_t inputIndex = 0; size_t inputRemainder = inputSize.front(); OutputToInputMap map; for(size_t outputIndex = 0; outputIndex < outputSize.size(); ++outputIndex) { InputMap localMap; size_t outputDimSize = outputSize[outputIndex]; while(outputDimSize > inputRemainder) { if(inputRemainder > 1) { localMap.push_back(inputIndex); } ++inputIndex; inputRemainder *= inputSize[inputIndex]; } localMap.push_back(inputIndex); inputRemainder /= outputDimSize; map.push_back(localMap); } return map; }