16 const void* inputData,
18 unsigned int dataTypeSize)
26 constexpr
unsigned int maxNumDims = 4;
29 std::vector<unsigned int> paddedInput(4);
30 std::vector<unsigned int> paddedBegin(4);
31 std::vector<unsigned int> paddedSize (4);
33 const unsigned int numPaddingDims = maxNumDims - numDims;
34 for (
unsigned int i = 0u; i < maxNumDims; ++i)
36 if (i < numPaddingDims)
44 const unsigned int j = i - numPaddingDims;
45 paddedInput[i] = inputShape[j];
46 paddedBegin[i] = descriptor.
m_Begin[j];
47 paddedSize[i] = descriptor.
m_Size[j];
51 unsigned int dim0 = paddedInput[0];
52 unsigned int dim1 = paddedInput[1];
53 unsigned int dim2 = paddedInput[2];
54 unsigned int dim3 = paddedInput[3];
56 unsigned int begin0 = paddedBegin[0];
57 unsigned int begin1 = paddedBegin[1];
58 unsigned int begin2 = paddedBegin[2];
59 unsigned int begin3 = paddedBegin[3];
61 unsigned int size0 = paddedSize[0];
62 unsigned int size1 = paddedSize[1];
63 unsigned int size2 = paddedSize[2];
64 unsigned int size3 = paddedSize[3];
71 const unsigned char* input =
reinterpret_cast<const unsigned char*
>(inputData);
72 unsigned char* output =
reinterpret_cast<unsigned char*
>(outputData);
75 for (
unsigned int idx0 = begin0; idx0 < begin0 + size0; ++idx0)
77 for (
unsigned int idx1 = begin1; idx1 < begin1 + size1; ++idx1)
79 for (
unsigned int idx2 = begin2; idx2 < begin2 + size2; ++idx2)
81 for (
unsigned int idx3 = begin3; idx3 < begin3 + size3; ++idx3)
83 const unsigned int inputOffset =
84 (((idx0 * dim1 + idx1) * dim2 + idx2) * dim3 + idx3) * dataTypeSize;
86 ::memcpy(output, input + inputOffset, dataTypeSize);
87 output += dataTypeSize;
void Slice(const TensorInfo &inputInfo, const SliceDescriptor &descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)
const TensorShape & GetShape() const
std::vector< unsigned int > m_Size
Size of the slice in each dimension.
Copyright (c) 2020 ARM Limited.
void IgnoreUnused(Ts &&...)
std::vector< unsigned int > m_Begin
Beginning indices of the slice in each dimension.
#define ARMNN_ASSERT(COND)
A SliceDescriptor for the SliceLayer.
unsigned int GetNumDimensions() const
Function that returns the tensor rank.