forked from Qortal/Brooklyn
56 lines
1.7 KiB
C++
56 lines
1.7 KiB
C++
//
|
|
// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <memory>
|
|
#include <armnn/MemorySources.hpp>
|
|
#include <armnn/utility/IgnoreUnused.hpp>
|
|
|
|
namespace armnn
|
|
{
|
|
/** Custom Allocator interface */
|
|
class ICustomAllocator
|
|
{
|
|
public:
|
|
/** Default virtual destructor. */
|
|
virtual ~ICustomAllocator() = default;
|
|
|
|
/** Interface to be implemented by the child class to allocate bytes
|
|
*
|
|
* @param[in] size Size to allocate
|
|
* @param[in] alignment Alignment that the returned pointer should comply with
|
|
*
|
|
* @return A pointer to the allocated memory
|
|
* The returned pointer must be host write accessible
|
|
*/
|
|
virtual void* allocate(size_t size, size_t alignment) = 0;
|
|
|
|
/** 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
|
|
* 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
|