Disallow copying of model::Operation class (#5383)
authorСергей Баранников/AI Tools Lab /SRR/Engineer/삼성전자 <s.barannikov@samsung.com>
Mon, 17 Jun 2019 04:18:22 +0000 (07:18 +0300)
committer오형석/On-Device Lab(SR)/Staff Engineer/삼성전자 <hseok82.oh@samsung.com>
Mon, 17 Jun 2019 04:18:22 +0000 (13:18 +0900)
Mark copy constructor and copy assignment operator as deleted to avoid unintentional copying.

Signed-off-by: Sergei Barannikov <s.barannikov@samsung.com>
runtimes/neurun/core/include/model/Operation.h
runtimes/neurun/core/src/exec/interp/operations/Add.cc
runtimes/neurun/core/src/exec/interp/operations/AvgPool2D.cc
runtimes/neurun/core/src/exec/interp/operations/Concat.cc
runtimes/neurun/core/src/exec/interp/operations/Conv2D.cc
runtimes/neurun/core/src/exec/interp/operations/FullyConnected.cc

index f8a5edc..029684d 100644 (file)
@@ -54,7 +54,13 @@ class Operation
 public:
   Operation(OperandConstraint input_constr, const OperandIndexSequence &inputs,
             const OperandIndexSequence &outputs);
-  Operation(OperandConstraint input_constr);
+  explicit Operation(OperandConstraint input_constr);
+
+  Operation(const Operation &) = delete;
+  Operation(Operation &&) = default;
+  Operation &operator=(const Operation &) = delete;
+  Operation &operator=(Operation &&) = default;
+
   virtual ~Operation();
 
 public:
index 791b3c0..374da97 100644 (file)
@@ -33,7 +33,7 @@ namespace add
 
 void prepareAdd(ExecEnv *env, const model::Operation &node)
 {
-  auto add_node = reinterpret_cast<const model::operation::AddNode &>(node);
+  const auto &add_node = dynamic_cast<const model::operation::AddNode &>(node);
 
   const auto lhs_index = node.getInputs().at(add_node.LHS);
   const auto rhs_index = node.getInputs().at(add_node.RHS);
@@ -110,7 +110,7 @@ void invoke(const ITensor *lhs_tensor, const ITensor *rhs_tensor, const ITensor
 
 void invokeAdd(const ExecEnv *env, const model::Operation &node)
 {
-  auto add_node = reinterpret_cast<const model::operation::AddNode &>(node);
+  const auto &add_node = dynamic_cast<const model::operation::AddNode &>(node);
 
   const auto lhs_index = node.getInputs().at(add_node.LHS);
   const auto rhs_index = node.getInputs().at(add_node.RHS);
index 9afb1b3..6e7b3b8 100644 (file)
@@ -34,8 +34,6 @@ namespace avgpool2d
 
 void prepareAvgPool2D(ExecEnv *env, const model::Operation &node)
 {
-  auto maxpool_node = reinterpret_cast<const model::operation::AvgPool2DNode &>(node);
-
   const auto in_index = node.getInputs().at(0);
   const auto out_index = node.getOutputs().at(0);
 
@@ -86,7 +84,7 @@ void invoke(const ITensor *in_tensor, const ITensor *out_tensor,
 
 void invokeAvgPool2D(const ExecEnv *env, const model::Operation &node)
 {
-  auto maxpool_node = reinterpret_cast<const model::operation::AvgPool2DNode &>(node);
+  const auto &avgpool_node = dynamic_cast<const model::operation::AvgPool2DNode &>(node);
 
   const auto in_index = node.getInputs().at(0);
   const auto out_index = node.getOutputs().at(0);
@@ -98,14 +96,14 @@ void invokeAvgPool2D(const ExecEnv *env, const model::Operation &node)
   const auto data_type = in_tensor->data_type();
   if (data_type == model::DataType::FLOAT32)
   {
-    invoke(in_tensor, out_tensor, maxpool_node.param());
+    invoke(in_tensor, out_tensor, avgpool_node.param());
   }
   else
   {
     throw std::runtime_error{"NYI: Support float only"};
   }
 }
-} // namespace maxpool2d
+} // namespace avgpool2d
 
 OpKernel *getAvgPool2DNode()
 {
index 6dc90a6..2c80bea 100644 (file)
@@ -34,7 +34,7 @@ namespace concat
 
 void prepareConcat(ExecEnv *env, const model::Operation &node)
 {
-  auto concat_node = reinterpret_cast<const model::operation::ConcatNode &>(node);
+  const auto &concat_node = dynamic_cast<const model::operation::ConcatNode &>(node);
 
   const auto first_index = node.getInputs().at(0);
   const auto out_index = node.getOutputs().at(0);
@@ -116,7 +116,7 @@ void invoke(const std::vector<const ITensor *> in_tensors, const ITensor *out_te
 
 void invokeConcat(const ExecEnv *env, const model::Operation &node)
 {
-  auto concat_node = reinterpret_cast<const model::operation::ConcatNode &>(node);
+  const auto &concat_node = dynamic_cast<const model::operation::ConcatNode &>(node);
   const auto axis_index{concat_node.param().axis_index};
   const int32_t axis_raw = env->model().operands.at(axis_index).asScalar<int32_t>();
 
index 61188aa..41991d2 100644 (file)
@@ -34,8 +34,6 @@ namespace conv2d
 
 void prepareConv2D(ExecEnv *env, const model::Operation &node)
 {
-  auto maxpool_node = reinterpret_cast<const model::operation::Conv2DNode &>(node);
-
   const auto in_index = node.getInputs().at(model::operation::Conv2DNode::INPUT);
   const auto kernel_index = node.getInputs().at(model::operation::Conv2DNode::KERNEL);
   const auto bias_index = node.getInputs().at(model::operation::Conv2DNode::BIAS);
@@ -105,7 +103,7 @@ void invoke(const ITensor *ifm_tensor, const ITensor *ker_tensor, const ITensor
 
 void invokeConv2D(const ExecEnv *env, const model::Operation &node)
 {
-  auto conv_node = reinterpret_cast<const model::operation::Conv2DNode &>(node);
+  const auto &conv_node = dynamic_cast<const model::operation::Conv2DNode &>(node);
 
   const auto ifm_index = node.getInputs().at(model::operation::Conv2DNode::INPUT);
   const auto ker_index = node.getInputs().at(model::operation::Conv2DNode::KERNEL);
index 5bf6701..25ed84a 100644 (file)
@@ -34,8 +34,6 @@ namespace fc
 
 void prepareFC(ExecEnv *env, const model::Operation &node)
 {
-  auto maxpool_node = reinterpret_cast<const model::operation::FullyConnectedNode &>(node);
-
   const auto in_index = node.getInputs().at(model::operation::FullyConnectedNode::INPUT);
   const auto kernel_index = node.getInputs().at(model::operation::FullyConnectedNode::WEIGHT);
   const auto bias_index = node.getInputs().at(model::operation::FullyConnectedNode::BIAS);
@@ -104,7 +102,7 @@ void invoke(const ITensor *ifm_tensor, const ITensor *ker_tensor, const ITensor
 
 void invokeFC(const ExecEnv *env, const model::Operation &node)
 {
-  auto conv_node = reinterpret_cast<const model::operation::FullyConnectedNode &>(node);
+  const auto &conv_node = dynamic_cast<const model::operation::FullyConnectedNode &>(node);
 
   const auto ifm_index = node.getInputs().at(model::operation::FullyConnectedNode::INPUT);
   const auto ker_index = node.getInputs().at(model::operation::FullyConnectedNode::WEIGHT);