{
const auto &operands = _plan.model().operands();
- _common_tensor_builder = std::make_shared<::internal::common::TensorBuilder>();
+ _common_tensor_builder = std::make_shared<::internal::common::TensorBuilder>(_plan);
// Add arm_compute backend
{
const operand::Context &operands(void) const { return _operands; }
public:
+ operand::Context &common_operands(void) { return _common_operands; }
+ const operand::Context &common_operands(void) const { return _common_operands; }
+
+public:
op::Sequence &operations(void) { return _ops; }
const op::Sequence &operations(void) const { return _ops; }
private:
std::shared_ptr<::internal::tflite::Model> _model;
operand::Context _operands;
+ operand::Context _common_operands;
op::Sequence _ops;
};
#include <arm_compute/core/ITensor.h>
#include <arm_compute/core/TensorInfo.h>
+#include "internal/IObject.h"
+
namespace internal
{
namespace common
namespace common
{
-TensorBuilder::TensorBuilder()
+TensorBuilder::TensorBuilder(::internal::arm_compute::Plan &plan) : _plan(plan)
{
// DO NOTHING
}
{
::internal::tflite::operand::Index ind{ind_int};
auto tensor = std::make_shared<::internal::common::Tensor>(tensor_info_ctx.at(ind.asInt()));
+ _plan.common_operands().set(ind, std::make_shared<::internal::common::Object>(tensor));
_tensors[ind.asInt()] = tensor;
}
}
#include "internal/ITensorBuilder.h"
#include "internal/common/Tensor.h"
+#include "internal/common/common.h"
+#include "internal/arm_compute.h"
namespace internal
{
class TensorBuilder : public ::internal::ITensorBuilder
{
public:
- TensorBuilder();
+ TensorBuilder(::internal::arm_compute::Plan &plan);
virtual void mark(const ::internal::tflite::operand::Index &ind) override;
virtual void markFromCommon(const ::internal::tflite::op::Node &op, int32_t ind) override;
std::shared_ptr<::internal::common::Tensor> at(const ::internal::tflite::operand::Index &ind);
private:
+ ::internal::arm_compute::Plan &_plan;
std::unordered_set<int> _inds;
std::unordered_map<int, std::shared_ptr<::internal::common::Tensor>> _tensors;
};
--- /dev/null
+#include "common.h"
+
+namespace internal
+{
+namespace common
+{
+
+void Object::access(const std::function<void(::arm_compute::ITensor &tensor)> &fn) const
+{
+ fn(*_tensor);
+}
+
+} // common
+} // internal
--- /dev/null
+#ifndef __INTERNAL_COMMON_H__
+#define __INTERNAL_COMMON_H__
+
+#include "internal/IObject.h"
+#include "Tensor.h"
+
+namespace internal
+{
+namespace common
+{
+
+class Object : public ::internal::IObject
+{
+public:
+ Object() = default;
+
+public:
+ Object(const std::shared_ptr<Tensor> &tensor) : _tensor{tensor}
+ {
+ // DO NOTHING
+ }
+
+public:
+ Tensor *ptr(void) const override { return _tensor.get(); }
+
+private:
+ std::shared_ptr<Tensor> _tensor;
+
+public:
+ void access(const std::function<void(::arm_compute::ITensor &tensor)> &fn) const override;
+};
+
+} // common
+} // internal
+
+#endif // __INTERNAL_COMMON_H__