COMPMID-2008: Add support for "reflect" padding mode in CLPad

Change-Id: I469f8173d5c4a1b6f03b52b9ddd33928dacd1e7b
Signed-off-by: Manuel Bottini <manuel.bottini@arm.com>
Reviewed-on: https://review.mlplatform.org/c/869
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Giuseppe Rossini <giuseppe.rossini@arm.com>
diff --git a/arm_compute/runtime/CL/functions/CLPadLayer.h b/arm_compute/runtime/CL/functions/CLPadLayer.h
index 0179441..33b09d6 100644
--- a/arm_compute/runtime/CL/functions/CLPadLayer.h
+++ b/arm_compute/runtime/CL/functions/CLPadLayer.h
@@ -25,10 +25,13 @@
 #define __ARM_COMPUTE_CLPADLAYER_H__
 
 #include "arm_compute/core/CL/kernels/CLCopyKernel.h"
-#include "arm_compute/core/CL/kernels/CLFillBorderKernel.h"
 #include "arm_compute/core/CL/kernels/CLMemsetKernel.h"
 #include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/CL/functions/CLConcatenateLayer.h"
+
 #include "arm_compute/runtime/CL/CLScheduler.h"
+#include "arm_compute/runtime/CL/CLTensor.h"
+#include "arm_compute/runtime/CL/functions/CLStridedSlice.h"
 #include "arm_compute/runtime/IFunction.h"
 
 namespace arm_compute
@@ -77,9 +80,18 @@
     void run() override;
 
 private:
-    CLCopyKernel       _copy_kernel;
-    CLFillBorderKernel _fillborder_kernel;
-    CLMemsetKernel     _memset_kernel;
+    void configure_constant_mode(ICLTensor *input, ICLTensor *output, const PaddingList &padding, const PixelValue constant_value);
+    void configure_reflect_symmetric_mode(ICLTensor *input, ICLTensor *output);
+
+    CLCopyKernel                          _copy_kernel;
+    PaddingMode                           _mode;
+    PaddingList                           _padding;
+    CLMemsetKernel                        _memset_kernel;
+    size_t                                _num_dimensions;
+    std::unique_ptr<CLStridedSlice[]>     _slice_functions;
+    std::unique_ptr<CLConcatenateLayer[]> _concat_functions;
+    std::unique_ptr<CLTensor[]>           _slice_results;
+    std::unique_ptr<CLTensor[]>           _concat_results;
 };
 } // namespace arm_compute
 #endif /*__ARM_COMPUTE_PADLAYER_H__ */