[coco] Direct update on UpdateSet (#1510)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Mon, 17 Sep 2018 00:43:42 +0000 (09:43 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Mon, 17 Sep 2018 00:43:42 +0000 (09:43 +0900)
This commit declares Update as a friend class of Bag, and revises Update
to update UpdateSet in a Bag without using Bag-to-BagInfo link.

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

index f52ec03..d436919 100644 (file)
@@ -47,6 +47,7 @@ public:
 public:
   friend class Dep;
   friend class Read;
+  friend class Update;
 
 public:
   explicit Bag(std::unique_ptr<BagInfo> &&info);
index 12dd867..c91560e 100644 (file)
@@ -15,19 +15,14 @@ namespace coco
 class Update final
 {
 public:
-  Update(const PtrLink<Bag, BagInfo> *bag_link, Bag::Updater *u)
-  {
-    link(bag_link);
-    updater(u);
-  }
+  // NOTE Bag-to-BagInfo link is no longer necessary
+  // TODO Rewrite constructor
+  Update(const PtrLink<Bag, BagInfo> *, Bag::Updater *u) { updater(u); }
 
 public:
   ~Update();
 
 public:
-  void link(const PtrLink<Bag, BagInfo> *l) { _link = l; }
-
-public:
   Bag *bag(void) const { return _bag; }
   void bag(Bag *bag);
 
@@ -36,9 +31,6 @@ public:
   void updater(Bag::Updater *u) { _updater = u; }
 
 private:
-  const PtrLink<Bag, BagInfo> *_link;
-
-private:
   Bag *_bag = nullptr;
   Bag::Updater *_updater = nullptr;
 };
index 68fe253..48b6db9 100644 (file)
@@ -16,9 +16,9 @@ void Update::bag(Bag *bag)
 {
   if (_bag)
   {
-    if (_link)
+    // TODO Remove unnecessary indentation
     {
-      auto info = _link->find(_bag);
+      auto info = _bag->_info.get();
       assert(info != nullptr);
       info->updates()->erase(this);
     }
@@ -30,9 +30,9 @@ void Update::bag(Bag *bag)
   if (bag)
   {
     _bag = bag;
-    if (_link)
+    // TODO Remove unnecessary indentation
     {
-      auto info = _link->find(_bag);
+      auto info = _bag->_info.get();
       assert(info != nullptr);
       info->updates()->insert(this);
     }