[coco] Automatically generate Op create methods (#1774)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Mon, 8 Oct 2018 04:53:36 +0000 (13:53 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Mon, 8 Oct 2018 04:53:36 +0000 (13:53 +0900)
With this commit, OpManage::create<Op> method for each Op is
automatically generated from Op.lst.

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

index 13e33cf..5f8965c 100644 (file)
@@ -25,47 +25,18 @@ using nncc::foundation::make_unique;
 namespace coco
 {
 
-template <> Load *OpManager::create<Load>(void)
-{
-  auto op = make_unique<Load>();
-  modulize(op.get());
-  return take(std::move(op));
-}
-
-template <> Conv2D *OpManager::create<Conv2D>(void)
-{
-  auto op = make_unique<Conv2D>();
-  modulize(op.get());
-  return take(std::move(op));
-}
-
-template <> MaxPool2D *OpManager::create<MaxPool2D>(void)
-{
-  auto op = make_unique<MaxPool2D>();
-  modulize(op.get());
-  return take(std::move(op));
-}
-
-template <> AvgPool2D *OpManager::create<AvgPool2D>(void)
-{
-  auto op = make_unique<AvgPool2D>();
-  modulize(op.get());
-  return take(std::move(op));
-}
-
-template <> ReLU *OpManager::create<ReLU>(void)
-{
-  auto op = make_unique<ReLU>();
-  modulize(op.get());
-  return take(std::move(op));
-}
-
-template <> PadF *OpManager::create<PadF>(void)
-{
-  auto op = make_unique<PadF>();
-  modulize(op.get());
-  return take(std::move(op));
-}
+//
+// Each Op class SHOULD be default constructible
+//
+#define OP(Name)                                  \
+  template <> Name *OpManager::create<Name>(void) \
+  {                                               \
+    auto op = make_unique<Name>();                \
+    modulize(op.get());                           \
+    return take(std::move(op));                   \
+  }
+#include "coco/IR/Op.lst"
+#undef OP
 
 void OpManager::destroy(Op *op)
 {