// // Copyright © 2022 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include #include namespace armnn { class ICLTensorProxy : public arm_compute::ICLTensor { public: ICLTensorProxy(arm_compute::ICLTensor* iclTensor) : m_DelegateTensor(iclTensor) {} ICLTensorProxy(const ICLTensorProxy&) = delete; ICLTensorProxy& operator=(const ICLTensorProxy&) = delete; ICLTensorProxy(ICLTensorProxy&&) = default; ICLTensorProxy& operator=(ICLTensorProxy&&) = default; void set(arm_compute::ICLTensor* iclTensor) { if(iclTensor != nullptr) { m_DelegateTensor = iclTensor; } } // Inherited methods overridden: arm_compute::ITensorInfo* info() const { ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr); return m_DelegateTensor->info(); } arm_compute::ITensorInfo* info() { ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr); return m_DelegateTensor->info(); } uint8_t* buffer() const { ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr); return m_DelegateTensor->buffer(); } arm_compute::CLQuantization quantization() const { ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr); return m_DelegateTensor->quantization(); } const cl::Buffer& cl_buffer() const { ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr); return m_DelegateTensor->cl_buffer(); } protected: uint8_t* do_map(cl::CommandQueue& q, bool blocking) { ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr); m_DelegateTensor->map(q, blocking); return m_DelegateTensor->buffer(); } void do_unmap(cl::CommandQueue& q) { ARM_COMPUTE_ERROR_ON(m_DelegateTensor == nullptr); return m_DelegateTensor->unmap(q); } private: arm_compute::ICLTensor* m_DelegateTensor{ nullptr }; }; } //namespace armnn