From cfccb9e171f8c3fafbaf40367be74e4acf845a8d Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EB=B0=95=EC=A2=85=ED=98=84/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Staff=20Engineer/=EC=82=BC=EC=84=B1?= =?utf8?q?=EC=A0=84=EC=9E=90?= Date: Mon, 23 Jul 2018 18:45:16 +0900 Subject: [PATCH] [coco] Add 'block' method to EntityManager (#767) This commit extends EntityManager to provides a 'BlockManager' object (as a pointer) via 'block' method. Signed-off-by: Jonghyun Park --- contrib/coco/core/include/coco/IR/EntityManager.h | 5 +++++ contrib/coco/core/src/IR/Module.cpp | 18 ++++++++++++++++++ contrib/coco/core/src/IR/Module.test.cpp | 3 +++ 3 files changed, 26 insertions(+) diff --git a/contrib/coco/core/include/coco/IR/EntityManager.h b/contrib/coco/core/include/coco/IR/EntityManager.h index 023dcad..8756ee6 100644 --- a/contrib/coco/core/include/coco/IR/EntityManager.h +++ b/contrib/coco/core/include/coco/IR/EntityManager.h @@ -3,6 +3,8 @@ #include "coco/IR/BagManager.h" +#include "coco/IR/BlockManager.h" + #include "coco/IR/InputManager.h" namespace coco @@ -21,6 +23,9 @@ struct EntityManager virtual BagManager *bag(void) = 0; virtual const BagManager *bag(void) const = 0; + virtual BlockManager *block(void) = 0; + virtual const BlockManager *block(void) const = 0; + virtual InputManager *input(void) = 0; virtual const InputManager *input(void) const = 0; }; diff --git a/contrib/coco/core/src/IR/Module.cpp b/contrib/coco/core/src/IR/Module.cpp index da1f696..d042749 100644 --- a/contrib/coco/core/src/IR/Module.cpp +++ b/contrib/coco/core/src/IR/Module.cpp @@ -15,6 +15,13 @@ public: const coco::BagManager *bag(void) const override { return _bag.get(); } public: + std::unique_ptr _block; + +public: + coco::BlockManager *block(void) override { return _block.get(); } + const coco::BlockManager *block(void) const override { return _block.get(); } + +public: std::unique_ptr _input; public: @@ -30,6 +37,10 @@ namespace class ModuleImpl final : public coco::Module { public: + std::unique_ptr> _instr_link; + std::unique_ptr> _block_link; + +public: std::unique_ptr _entity; public: @@ -51,17 +62,24 @@ namespace coco std::unique_ptr Module::create(void) { + auto ins_link = nncc::foundation::make_unique>(); + auto blk_link = nncc::foundation::make_unique>(); + auto m = nncc::foundation::make_unique<::ModuleImpl>(); auto mgr = nncc::foundation::make_unique<::EntityManagerImpl>(); { mgr->_bag = nncc::foundation::make_unique(); + mgr->_block = nncc::foundation::make_unique(blk_link.get(), ins_link.get()); mgr->_input = nncc::foundation::make_unique(); } m->_entity = std::move(mgr); m->_input = nncc::foundation::make_unique(); + m->_instr_link = std::move(ins_link); + m->_block_link = std::move(blk_link); + return std::move(m); } diff --git a/contrib/coco/core/src/IR/Module.test.cpp b/contrib/coco/core/src/IR/Module.test.cpp index b9938a1..4650292 100644 --- a/contrib/coco/core/src/IR/Module.test.cpp +++ b/contrib/coco/core/src/IR/Module.test.cpp @@ -17,6 +17,9 @@ TEST(IR_MODULE, create) ASSERT_NE(mutable_m->entity()->bag(), nullptr); ASSERT_EQ(immutable_m->entity()->bag(), mutable_m->entity()->bag()); + ASSERT_NE(mutable_m->entity()->block(), nullptr); + ASSERT_EQ(immutable_m->entity()->block(), mutable_m->entity()->block()); + ASSERT_NE(mutable_m->entity()->input(), nullptr); ASSERT_EQ(immutable_m->entity()->input(), mutable_m->entity()->input()); -- 2.7.4