IVGCVSW-6310 Update ICustomAllocator and add GetDefaultAllocator function to backends

Signed-off-by: Francis Murtagh <francis.murtagh@arm.com>
Change-Id: If2879e8a82692285e7fa3f4d09abd608ca28de12
diff --git a/include/armnn/backends/IBackendInternal.hpp b/include/armnn/backends/IBackendInternal.hpp
index f4fe678..7500e35 100644
--- a/include/armnn/backends/IBackendInternal.hpp
+++ b/include/armnn/backends/IBackendInternal.hpp
@@ -13,12 +13,12 @@
 #include <SubgraphView.hpp>
 #include <optimizations/Optimization.hpp>
 
-#include "IBackendContext.hpp"
-#include "armnn/backends/profiling/IBackendProfiling.hpp"
-#include "armnn/backends/profiling/IBackendProfilingContext.hpp"
-#include "IMemoryManager.hpp"
-#include "ITensorHandleFactory.hpp"
-#include "OptimizationViews.hpp"
+#include <armnn/backends/IBackendContext.hpp>
+#include <armnn/backends/IMemoryManager.hpp>
+#include <armnn/backends/ITensorHandleFactory.hpp>
+#include <armnn/backends/OptimizationViews.hpp>
+#include <armnn/backends/profiling/IBackendProfiling.hpp>
+#include <armnn/backends/profiling/IBackendProfilingContext.hpp>
 
 #include <vector>
 #include <memory>
@@ -198,6 +198,14 @@
         }
         return false;
     }
+
+    /// Returns the default memory allocator for the backend
+    ///
+    /// \return - Returns unique pointer to the Default Allocator of the Backend
+    virtual std::unique_ptr<ICustomAllocator> GetDefaultAllocator() const
+    {
+        throw armnn::Exception("GetDefaultAllocator: Function has not been implemented in backend.");
+    }
 };
 
 using IBackendInternalUniquePtr = std::unique_ptr<IBackendInternal>;
diff --git a/include/armnn/backends/ICustomAllocator.hpp b/include/armnn/backends/ICustomAllocator.hpp
index 2cb5f41..eb8dfe1 100644
--- a/include/armnn/backends/ICustomAllocator.hpp
+++ b/include/armnn/backends/ICustomAllocator.hpp
@@ -8,6 +8,7 @@
 #include <cstddef>
 #include <memory>
 #include <armnn/MemorySources.hpp>
+#include <armnn/utility/IgnoreUnused.hpp>
 
 namespace armnn
 {
@@ -31,13 +32,26 @@
     /** Interface to be implemented by the child class to free the allocated bytes */
     virtual void free(void* ptr) = 0;
 
-    //  Used to specify what type of memory is being allocated by this allocator.
-    //  Supported types are:
-    //      MemorySource::Malloc
-    //      MemorySource::DmaBuf
-    //  Unsupported types are:
-    //      MemorySource::DmaBufProtected
+    /**  Used to specify what type of memory is being allocated by this allocator.
+     *  Supported types are:
+     *       MemorySource::Malloc
+     *       MemorySource::DmaBuf
+     *   Unsupported types are:
+     *      MemorySource::DmaBufProtected
+     */
     virtual armnn::MemorySource GetMemorySourceType() = 0;
 
+    /** Interface that may be implemented to allow retrieval of Memory Region
+     *  from allocated buffer at a certain offset
+     */
+    virtual void* GetMemoryRegionAtOffset(void* buffer, size_t offset, size_t alignment = 0)
+    {
+        IgnoreUnused(offset);
+        IgnoreUnused(alignment);
+        IgnoreUnused(buffer);
+        throw armnn::Exception(
+                "ICustomerAllocator::GetMemoryRegionAtOffset(): This function should be overridden in subclass.");
+    }
+
 };
 } // namespace armnn
\ No newline at end of file