[coco] Add 'output' method in Module (#780)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Tue, 24 Jul 2018 06:01:44 +0000 (15:01 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Tue, 24 Jul 2018 06:01:44 +0000 (15:01 +0900)
This commit adds 'output' method in Module class, which allows users to
access Output list inside Module.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
contrib/coco/core/include/coco/IR/Module.h
contrib/coco/core/include/coco/IR/OutputList.h [new file with mode: 0644]
contrib/coco/core/src/IR/Module.cpp
contrib/coco/core/src/IR/Module.test.cpp

index d1a1060..15bfaae 100644 (file)
@@ -4,6 +4,7 @@
 #include "coco/IR/EntityManager.h"
 #include "coco/IR/Block.h"
 #include "coco/IR/InputList.h"
+#include "coco/IR/OutputList.h"
 
 #include <memory>
 
@@ -38,6 +39,10 @@ public:
   virtual const InputList *input(void) const = 0;
 
 public:
+  virtual OutputList *output(void) = 0;
+  virtual const OutputList *output(void) const = 0;
+
+public:
   static std::unique_ptr<Module> create(void);
 };
 
diff --git a/contrib/coco/core/include/coco/IR/OutputList.h b/contrib/coco/core/include/coco/IR/OutputList.h
new file mode 100644 (file)
index 0000000..de5ab80
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef __COCO_IR_OUTPUT_LIST_H__
+#define __COCO_IR_OUTPUT_LIST_H__
+
+#include "coco/IR/Output.h"
+
+#include "coco/ADT/PtrList.h"
+
+namespace coco
+{
+
+using OutputList = PtrList<Output>;
+
+} // namespace coco
+
+#endif // __COCO_IR_OUTPUT_LIST_H__
index c4bf357..8315c1c 100644 (file)
@@ -74,6 +74,13 @@ public:
 public:
   coco::InputList *input(void) override { return _input.get(); }
   const coco::InputList *input(void) const override { return _input.get(); }
+
+public:
+  std::unique_ptr<coco::OutputList> _output;
+
+public:
+  coco::OutputList *output(void) override { return _output.get(); }
+  const coco::OutputList *output(void) const override { return _output.get(); }
 };
 
 } // namespace
@@ -101,6 +108,7 @@ std::unique_ptr<Module> Module::create(void)
   // NOTE BlockManager and BlockList SHOULD share 'blk_link'
   m->_block = nncc::foundation::make_unique<coco::BlockList>(m.get(), blk_link.get());
   m->_input = nncc::foundation::make_unique<coco::InputList>();
+  m->_output = nncc::foundation::make_unique<coco::OutputList>();
 
   m->_instr_link = std::move(ins_link);
   m->_block_link = std::move(blk_link);
index be4c1c0..92b92ee 100644 (file)
@@ -34,4 +34,7 @@ TEST(IR_MODULE, create)
 
   ASSERT_NE(mutable_m->input(), nullptr);
   ASSERT_EQ(immutable_m->input(), mutable_m->input());
+
+  ASSERT_NE(mutable_m->output(), nullptr);
+  ASSERT_EQ(immutable_m->output(), mutable_m->output());
 }