[nncc.foundation] Add 'Region' classes (#239)
author박종현/동작제어Lab(SR)/Senior Engineer/삼성전자 <jh1302.park@samsung.com>
Wed, 23 May 2018 06:46:29 +0000 (15:46 +0900)
committer오형석/동작제어Lab(SR)/Senior Engineer/삼성전자 <hseok82.oh@samsung.com>
Wed, 23 May 2018 06:46:29 +0000 (15:46 +0900)
This commit introduces Region interface which denotes a typed contigious
memory block, and adds OwnedRegion and ExternalRegion which implements
this 'Region' interface.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
libs/foundation/include/nncc/foundation/ExternalRegion.h [new file with mode: 0644]
libs/foundation/include/nncc/foundation/OwnedRegion.h [new file with mode: 0644]
libs/foundation/include/nncc/foundation/Region.h [new file with mode: 0644]
libs/foundation/src/ExternalRegion.test.cpp [new file with mode: 0644]
libs/foundation/src/OwnedRegion.test.cpp [new file with mode: 0644]

diff --git a/libs/foundation/include/nncc/foundation/ExternalRegion.h b/libs/foundation/include/nncc/foundation/ExternalRegion.h
new file mode 100644 (file)
index 0000000..b7e00a4
--- /dev/null
@@ -0,0 +1,31 @@
+#ifndef __NNCC_FOUNDATION_EXTERNAL_REGION_H__
+#define __NNCC_FOUNDATION_EXTERNAL_REGION_H__
+
+#include "nncc/foundation/Region.h"
+
+namespace nncc
+{
+namespace foundation
+{
+
+template <typename T> class ExternalRegion final : public Region<T>
+{
+public:
+  ExternalRegion(T *base, uint32_t size) : _base{base}, _size{size}
+  {
+    // DO NOTHING
+  }
+
+public:
+  T *base(void) override { return _base; }
+  uint32_t size(void) const override { return _size; }
+
+private:
+  T *const _base;
+  uint32_t const _size;
+};
+
+} // namespace foundation
+} // namespace nncc
+
+#endif // __NNCC_FOUNDATION_EXTERNAL_REGION_H__
diff --git a/libs/foundation/include/nncc/foundation/OwnedRegion.h b/libs/foundation/include/nncc/foundation/OwnedRegion.h
new file mode 100644 (file)
index 0000000..2d8f463
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef __NNCC_FOUNDATION_OWNED_REGION_H__
+#define __NNCC_FOUNDATION_OWNED_REGION_H__
+
+#include "nncc/foundation/Region.h"
+
+namespace nncc
+{
+namespace foundation
+{
+
+template <typename T> class OwnedRegion final : public Region<T>
+{
+public:
+  OwnedRegion(uint32_t size) : _base{new T[size]}, _size{size}
+  {
+    // DO NOTHING
+  }
+
+public:
+  ~OwnedRegion() { delete[] _base; }
+
+public:
+  T *base(void) override { return _base; }
+  uint32_t size(void) const override { return _size; }
+
+private:
+  T *const _base;
+  uint32_t const _size;
+};
+
+} // namespace foundation
+} // namespace nncc
+
+#endif // __NNCC_FOUNDATION_OWNED_REGION_H__
diff --git a/libs/foundation/include/nncc/foundation/Region.h b/libs/foundation/include/nncc/foundation/Region.h
new file mode 100644 (file)
index 0000000..ef7be0b
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef __NNCC_FOUNDATION_REGION_H__
+#define __NNCC_FOUNDATION_REGION_H__
+
+#include <cstdint>
+
+namespace nncc
+{
+namespace foundation
+{
+
+template <typename T> struct Region
+{
+  virtual ~Region() = default;
+
+  virtual T *base(void) = 0;
+  virtual uint32_t size(void) const = 0;
+};
+
+} // namespace foundation
+} // namespace nncc
+
+#endif // __NNCC_FOUNDATION_REGION_H__
diff --git a/libs/foundation/src/ExternalRegion.test.cpp b/libs/foundation/src/ExternalRegion.test.cpp
new file mode 100644 (file)
index 0000000..89ed44d
--- /dev/null
@@ -0,0 +1,13 @@
+#include <nncc/foundation/ExternalRegion.h>
+
+#include <gtest/gtest.h>
+
+TEST(FOUNDATION_EXTERNAL_REGION, ctor)
+{
+  int buffer[1];
+
+  nncc::foundation::ExternalRegion<int> r{buffer, 1};
+
+  ASSERT_EQ(r.size(), 1);
+  ASSERT_EQ(r.base(), buffer);
+}
diff --git a/libs/foundation/src/OwnedRegion.test.cpp b/libs/foundation/src/OwnedRegion.test.cpp
new file mode 100644 (file)
index 0000000..e3833a9
--- /dev/null
@@ -0,0 +1,11 @@
+#include <nncc/foundation/OwnedRegion.h>
+
+#include <gtest/gtest.h>
+
+TEST(FOUNDATION_OWNED_REGION, ctor)
+{
+  nncc::foundation::OwnedRegion<int> r{1};
+
+  ASSERT_EQ(r.size(), 1);
+  ASSERT_NE(r.base(), nullptr);
+}