--- /dev/null
+#ifndef __NNFW_KERNEL_ACL_NEUNIQUETENSOR_H__
+#define __NNFW_KERNEL_ACL_NEUNIQUETENSOR_H__
+
+#include <arm_compute/runtime/Tensor.h>
+
+namespace nnfw {
+namespace kernel {
+namespace acl {
+
+// TODO: find a way to merge CLUniqueTensor and NEUniqueTensor.
+class NEUniqueTensor
+{
+public:
+ NEUniqueTensor(const ::arm_compute::TensorInfo &info)
+ {
+ _tensor.allocator()->init(info);
+ }
+
+public:
+ // Both copy and move are not allowed
+ NEUniqueTensor(const NEUniqueTensor &) = delete;
+ NEUniqueTensor(NEUniqueTensor &&) = delete;
+
+public:
+ ~NEUniqueTensor()
+ {
+ _tensor.allocator()->free();
+ }
+
+public:
+ void allocate()
+ {
+ _tensor.allocator()->allocate();
+ }
+
+public:
+ ::arm_compute::Tensor &ref(void) { return _tensor; }
+ ::arm_compute::Tensor *ptr(void) { return &_tensor; }
+
+private:
+ ::arm_compute::Tensor _tensor;
+};
+
+} // namespace acl
+} // namespace kernel
+} // namespace nnfw
+
+#endif //__NNFW_KERNEL_ACL_NEUNIQUETENSOR_H__