[nest] Support copy/move operation on Module (#823)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Thu, 26 Jul 2018 01:13:12 +0000 (10:13 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Thu, 26 Jul 2018 01:13:12 +0000 (10:13 +0900)
This commit revises Module class to have default copy/move constructor.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
contrib/nest/include/nest/Expr.h
contrib/nest/include/nest/Module.h
contrib/nest/include/nest/Ret.h
contrib/nest/src/Module.test.cpp

index d23137b..5630204 100644 (file)
 namespace nest
 {
 
+// WARNING All of the descendant of expr::Node SHOULD BE immutable
+//
+// The copy/move constructor of Block and Module class simply copies their shared pointer under
+// the assumption that these classes are immutable.
 using Expr = std::shared_ptr<nest::expr::Node>;
 
 } // namespace nest
index 7e4f1f3..4f84c66 100644 (file)
@@ -14,10 +14,6 @@ class Module
 public:
   Module() = default;
 
-public:
-  Module(const Module &) = delete;
-  Module(Module &&) = delete;
-
 private:
   VarContext _var_ctx;
 
index 75c0166..daf270e 100644 (file)
@@ -7,6 +7,10 @@
 namespace nest
 {
 
+// WARNING Ret SHOULD BE immutable
+//
+// The copy/move constructor of Module class simply copies the shared pointer under the assumption
+// that Ret is immutable.
 class Ret
 {
 public:
index 975ee12..8048816 100644 (file)
@@ -69,3 +69,15 @@ TEST(MODULE, ret)
   ASSERT_EQ(m.ret().id(), ofm.id());
   ASSERT_EQ(m.ret().sub().rank(), 1);
 }
+
+TEST(MODULE, copy)
+{
+  nest::Module orig;
+  nest::Module copy;
+
+  orig = copy;
+
+  orig.var().make();
+
+  ASSERT_EQ(copy.var().count(), 0);
+}