[coco] Introduce Bag::deps (#1411)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Mon, 10 Sep 2018 01:43:42 +0000 (10:43 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Mon, 10 Sep 2018 01:43:42 +0000 (10:43 +0900)
This commit introduces Bag::deps which replaces existing 'object'
method.

New 'deps' method returns a snapshot of dependent object set similarly
as 'reads' and 'updates'.

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

index dcd30fe..29f085f 100644 (file)
@@ -51,6 +51,7 @@ public:
   uint32_t size(void) const;
 
 public:
+  // NOTE This method is deprecated. Use 'deps' instead
   const ObjectSet *object(void) const;
 
 public:
@@ -58,6 +59,8 @@ public:
   bool isOutput(void) const;
 
 public:
+  // @brief Return the set of objects that depends on this bag
+  ObjectSet deps(void) const;
   // TODO Rename as readers
   ReaderSet reads(void) const;
   // TODO Rename as updaters
index 8927d61..ba8a9fd 100644 (file)
@@ -25,11 +25,13 @@ const ObjectSet *Bag::object(void) const { return _info->object(); }
 bool Bag::isInput(void) const { return _info->mask()->masked(BagMask::Input); }
 bool Bag::isOutput(void) const { return _info->mask()->masked(BagMask::Output); }
 
+ObjectSet Bag::deps(void) const { return *_info->object(); }
+
 Bag::ReaderSet Bag::reads(void) const
 {
   Bag::ReaderSet res;
 
-  for (auto obj : *object())
+  for (auto obj : deps())
   {
     for (auto use : *obj->user())
     {
@@ -49,7 +51,7 @@ Bag::UpdaterSet Bag::updates(void) const
 {
   Bag::UpdaterSet res;
 
-  for (auto obj : *object())
+  for (auto obj : deps())
   {
     if (obj->def())
     {
index 2f892be..083b032 100644 (file)
@@ -56,7 +56,7 @@ TEST_F(DepTest, bag_update_with_link_and_object)
 
   dep.bag(bag);
 
-  auto deps = *(bag->object());
+  auto deps = bag->deps();
 
   ASSERT_EQ(deps.size(), 1);
   ASSERT_NE(deps.count(obj), 0);
index 6a236c8..dde0216 100644 (file)
@@ -81,15 +81,21 @@ TEST_F(ObjectTest, bag_update)
   ASSERT_EQ(bag_info->object()->count(&obj), 1);
 
   // User SHOULD be able to access dependent objects through 'bag'
-  ASSERT_EQ(bag->object()->size(), 1);
-  ASSERT_EQ(bag->object()->count(&obj), 1);
+  {
+    auto deps = bag->deps();
+    ASSERT_EQ(deps.size(), 1);
+    ASSERT_EQ(deps.count(&obj), 1);
+  }
 
   // Unlink Object-Bag relation
   obj.bag(nullptr);
 
   ASSERT_EQ(obj.bag(), nullptr);
 
-  ASSERT_EQ(bag->object()->size(), 0);
+  {
+    auto deps = bag->deps();
+    ASSERT_EQ(deps.size(), 0);
+  }
 }
 
 TEST_F(ObjectTest, destructor)
@@ -107,5 +113,8 @@ TEST_F(ObjectTest, destructor)
   }
 
   // Object SHOULD be unlinked from Bag on destruction
-  ASSERT_EQ(bag->object()->size(), 0);
+  {
+    auto deps = bag->deps();
+    ASSERT_EQ(deps.size(), 0);
+  }
 }