From cf78c8769d745ac0a5455dbaf10345b282c352e2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EB=B0=95=EC=A2=85=ED=98=84/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Senior=20Engineer/=EC=82=BC=EC=84=B1?= =?utf8?q?=EC=A0=84=EC=9E=90?= Date: Wed, 23 May 2018 15:46:29 +0900 Subject: [PATCH] [nncc.foundation] Add 'Region' classes (#239) 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 --- .../include/nncc/foundation/ExternalRegion.h | 31 ++++++++++++++++++++ .../include/nncc/foundation/OwnedRegion.h | 34 ++++++++++++++++++++++ libs/foundation/include/nncc/foundation/Region.h | 22 ++++++++++++++ libs/foundation/src/ExternalRegion.test.cpp | 13 +++++++++ libs/foundation/src/OwnedRegion.test.cpp | 11 +++++++ 5 files changed, 111 insertions(+) create mode 100644 libs/foundation/include/nncc/foundation/ExternalRegion.h create mode 100644 libs/foundation/include/nncc/foundation/OwnedRegion.h create mode 100644 libs/foundation/include/nncc/foundation/Region.h create mode 100644 libs/foundation/src/ExternalRegion.test.cpp create mode 100644 libs/foundation/src/OwnedRegion.test.cpp diff --git a/libs/foundation/include/nncc/foundation/ExternalRegion.h b/libs/foundation/include/nncc/foundation/ExternalRegion.h new file mode 100644 index 0000000..b7e00a4 --- /dev/null +++ b/libs/foundation/include/nncc/foundation/ExternalRegion.h @@ -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 class ExternalRegion final : public Region +{ +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 index 0000000..2d8f463 --- /dev/null +++ b/libs/foundation/include/nncc/foundation/OwnedRegion.h @@ -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 class OwnedRegion final : public Region +{ +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 index 0000000..ef7be0b --- /dev/null +++ b/libs/foundation/include/nncc/foundation/Region.h @@ -0,0 +1,22 @@ +#ifndef __NNCC_FOUNDATION_REGION_H__ +#define __NNCC_FOUNDATION_REGION_H__ + +#include + +namespace nncc +{ +namespace foundation +{ + +template 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 index 0000000..89ed44d --- /dev/null +++ b/libs/foundation/src/ExternalRegion.test.cpp @@ -0,0 +1,13 @@ +#include + +#include + +TEST(FOUNDATION_EXTERNAL_REGION, ctor) +{ + int buffer[1]; + + nncc::foundation::ExternalRegion 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 index 0000000..e3833a9 --- /dev/null +++ b/libs/foundation/src/OwnedRegion.test.cpp @@ -0,0 +1,11 @@ +#include + +#include + +TEST(FOUNDATION_OWNED_REGION, ctor) +{ + nncc::foundation::OwnedRegion r{1}; + + ASSERT_EQ(r.size(), 1); + ASSERT_NE(r.base(), nullptr); +} -- 2.7.4