From: 박종현/동작제어Lab(SR)/Senior Engineer/삼성전자 Date: Wed, 23 May 2018 06:46:29 +0000 (+0900) Subject: [nncc.foundation] Add 'Region' classes (#239) X-Git-Tag: nncc_backup~2674 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cf78c8769d745ac0a5455dbaf10345b282c352e2;p=platform%2Fcore%2Fml%2Fnnfw.git [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 --- 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); +}