COMPMID-1088: Use IMemoryRegion in interfaces where possible

-Simplifies import memory interface
-Changes the used of void** handles with appropriate interfaces.

Change-Id: I5918c855c11f46352058864623336b352162a4b7
diff --git a/arm_compute/runtime/CL/CLMemoryRegion.h b/arm_compute/runtime/CL/CLMemoryRegion.h
index 01dd54e..dbfd822 100644
--- a/arm_compute/runtime/CL/CLMemoryRegion.h
+++ b/arm_compute/runtime/CL/CLMemoryRegion.h
@@ -81,9 +81,9 @@
     virtual void unmap(cl::CommandQueue &q) = 0;
 
     // Inherited methods overridden :
-    void *buffer() override;
-    void *buffer() const override;
-    void **handle() override;
+    void                          *buffer() override;
+    void                          *buffer() const override;
+    std::unique_ptr<IMemoryRegion> extract_subregion(size_t offset, size_t size) override;
 
 protected:
     cl::Context _ctx;
@@ -102,11 +102,16 @@
      * @param[in] size  Region size
      */
     CLBufferMemoryRegion(cl::Context ctx, cl_mem_flags flags, size_t size);
+    /** Constructor
+     *
+     * @param[in] buffer Buffer to be used as a memory region
+     */
+    CLBufferMemoryRegion(const cl::Buffer &buffer);
 
     // Inherited methods overridden :
-    void *ptr() override;
-    void *map(cl::CommandQueue &q, bool blocking) override;
-    void unmap(cl::CommandQueue &q) override;
+    void *ptr() final;
+    void *map(cl::CommandQueue &q, bool blocking) final;
+    void unmap(cl::CommandQueue &q) final;
 };
 
 /** OpenCL SVM memory region interface */
@@ -153,8 +158,8 @@
     CLCoarseSVMMemoryRegion(cl::Context ctx, cl_mem_flags flags, size_t size, size_t alignment);
 
     // Inherited methods overridden :
-    void *map(cl::CommandQueue &q, bool blocking) override;
-    void unmap(cl::CommandQueue &q) override;
+    void *map(cl::CommandQueue &q, bool blocking) final;
+    void unmap(cl::CommandQueue &q) final;
 };
 
 /** OpenCL fine-grain SVM memory region implementation */
@@ -171,8 +176,8 @@
     CLFineSVMMemoryRegion(cl::Context ctx, cl_mem_flags flags, size_t size, size_t alignment);
 
     // Inherited methods overridden :
-    void *map(cl::CommandQueue &q, bool blocking) override;
-    void unmap(cl::CommandQueue &q) override;
+    void *map(cl::CommandQueue &q, bool blocking) final;
+    void unmap(cl::CommandQueue &q) final;
 };
 } // namespace arm_compute
 #endif /* __ARM_COMPUTE_RUNTIME_CL_CL_MEMORY_REGION_H__ */