[coco] Add 'asConv2D' method (#785)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Tue, 24 Jul 2018 10:30:38 +0000 (19:30 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Tue, 24 Jul 2018 10:30:38 +0000 (19:30 +0900)
This commit adds 'asConv2D' method to Op class, which allows users to
safely downcast 'Op' as 'Conv2D'.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
contrib/coco/core/include/coco/IR/Op.h
contrib/coco/core/src/IR/Op.test.cpp

index 5baae3f..2ab6ae7 100644 (file)
@@ -4,12 +4,17 @@
 namespace coco
 {
 
+class Conv2D;
+
 /***
  * @brief Base interface on all supported NN operations
  */
 struct Op
 {
   virtual ~Op() = default;
+
+  virtual Conv2D *asConv2D(void) { return nullptr; }
+  virtual const Conv2D *asConv2D(void) const { return nullptr; }
 };
 
 } // namespace coco
@@ -39,6 +44,10 @@ public:
 public:
   explicit Conv2D(const Param &);
 
+public:
+  Conv2D *asConv2D(void) override { return this; }
+  const Conv2D *asConv2D(void) const override { return this; }
+
 private:
   KernelObject *_ker;
 
index 4f7d908..7b26535 100644 (file)
@@ -11,6 +11,17 @@ TEST(IR_OP_CONV2D, ctor)
   ASSERT_EQ(op.ker(), nullptr);
 }
 
+TEST(IR_OP_CONV2D, asConv2D)
+{
+  coco::Conv2D op{coco::Conv2D::Param{}};
+
+  coco::Op *mutable_base = &op;
+  const coco::Op *immutable_base = &op;
+
+  ASSERT_EQ(mutable_base->asConv2D(), &op);
+  ASSERT_EQ(mutable_base->asConv2D(), immutable_base->asConv2D());
+}
+
 TEST(IR_OP_CONV2D, ker_update)
 {
   const coco::Conv2D::Param param{};