[nest] Add 'Block' class (#684)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Tue, 17 Jul 2018 06:01:51 +0000 (15:01 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Tue, 17 Jul 2018 06:01:51 +0000 (15:01 +0900)
This commit adds 'Block' class which maintains a sequence of nest
statements.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
contrib/nest/include/nest/Block.h [new file with mode: 0644]
contrib/nest/include/nest/Stmt.h
contrib/nest/src/Block.test.cpp [new file with mode: 0644]

diff --git a/contrib/nest/include/nest/Block.h b/contrib/nest/include/nest/Block.h
new file mode 100644 (file)
index 0000000..7e733d4
--- /dev/null
@@ -0,0 +1,30 @@
+#ifndef __NEST_BLOCK_H__
+#define __NEST_BLOCK_H__
+
+#include "nest/Stmt.h"
+
+#include <vector>
+
+#include <cstdint>
+
+namespace nest
+{
+
+struct Block
+{
+public:
+  uint32_t size(void) const { return _stmts.size(); }
+
+public:
+  const Stmt &at(uint32_t n) const { return _stmts.at(n); }
+
+public:
+  void append(const Stmt &stmt) { _stmts.emplace_back(stmt); }
+
+private:
+  std::vector<Stmt> _stmts;
+};
+
+} // namespace nest
+
+#endif // __NEST_BLOCK_H__
index fb8d8dc..e47d07c 100644 (file)
@@ -4,4 +4,13 @@
 #include "nest/stmt/Node.h"
 #include "nest/stmt/Visitor.h"
 
+#include <memory>
+
+namespace nest
+{
+
+using Stmt = std::shared_ptr<stmt::Node>;
+
+} // namespace nest
+
 #endif // __NEST_STMT_H__
diff --git a/contrib/nest/src/Block.test.cpp b/contrib/nest/src/Block.test.cpp
new file mode 100644 (file)
index 0000000..045a659
--- /dev/null
@@ -0,0 +1,25 @@
+#include "nest/Block.h"
+
+#include <gtest/gtest.h>
+
+namespace
+{
+struct DummyNode final : public nest::stmt::Node
+{
+  // Dummy Node for testing
+};
+}
+
+TEST(BLOCK, use_case_1)
+{
+  nest::Block block;
+
+  ASSERT_EQ(block.size(), 0);
+
+  auto stmt = std::make_shared<DummyNode>();
+
+  block.append(stmt);
+
+  ASSERT_EQ(block.size(), 1);
+  ASSERT_EQ(block.at(0), stmt);
+}