From e64b7496b78fc14920bf11c45279ead63f3c9295 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Thu, 14 Sep 2017 00:59:21 +0200 Subject: [PATCH] [DEV] continue removing STL --- doc/mainpage.md | 2 +- ememory/UniquePtr.hpp | 35 +++++++++++++++++++++++++++++++---- ememory/debug.hpp | 4 +++- ememory/details/SharedPtr.hxx | 2 -- ememory/details/WeakPtr.hxx | 3 +-- ememory/memory.hpp | 2 +- 6 files changed, 37 insertions(+), 11 deletions(-) diff --git a/doc/mainpage.md b/doc/mainpage.md index da309c1..0c7db1f 100644 --- a/doc/mainpage.md +++ b/doc/mainpage.md @@ -6,7 +6,7 @@ EMEMORY library {#mainpage} What is EMEMORY, and how can I use it? ====================================== -EMEMORY, or Ewol Memory interface is a simple abstraction layer over std::shared_ptr. +EMEMORY, or Ewol Memory interface implementing ememory::SharedPtr and ememory::UniquePtr. EMEMORY is designed for: - Permit to change the backend of shered_ptr when we want diff --git a/ememory/UniquePtr.hpp b/ememory/UniquePtr.hpp index c527599..e2c5d7d 100644 --- a/ememory/UniquePtr.hpp +++ b/ememory/UniquePtr.hpp @@ -5,9 +5,10 @@ namespace ememory { template class UniquePtr { - private: + //private: Do it better ... + public: EMEM_UPTR_TYPE* m_pointer; - + private: template UniquePtr(UniquePtr &) = delete; @@ -23,10 +24,16 @@ namespace ememory { } explicit UniquePtr(EMEM_UPTR_TYPE* _obj) : - m_pointer(_obj) - { + m_pointer(_obj) { } + template + UniquePtr(UniquePtr&& _obj) : + m_pointer(nullptr) { + // TODO: Better: _obj.swap(*this); + m_pointer = _obj.m_pointer; + _obj.m_pointer = nullptr; + } ~UniquePtr() { reset(); } @@ -66,6 +73,26 @@ namespace ememory { void swap(UniquePtr &_obj){ etk::swap(m_pointer, _obj.m_pointer); } + /** + * @brief Check if the UniquePtr have an internal data (not nullptr) + * @return true The pointer is not asigned, false otherwise + */ + bool operator==(etk::NullPtr) const { + return m_pointer == nullptr; + } + /** + * @brief Check if the UniquePtr have not an internal data (equal nullptr) + * @return true The pointer is asigned, false otherwise + */ + bool operator!=(etk::NullPtr) const { + return m_pointer != nullptr; + } + /* + template + void swap(UniquePtr& _obj) { + etk::swap(m_pointer, _obj.m_pointer); + } + */ }; template diff --git a/ememory/debug.hpp b/ememory/debug.hpp index f6d4e18..31be485 100644 --- a/ememory/debug.hpp +++ b/ememory/debug.hpp @@ -8,7 +8,9 @@ #pragma once #include -#include +extern "C" { + #include +} namespace ememory { int32_t getLogId(); diff --git a/ememory/details/SharedPtr.hxx b/ememory/details/SharedPtr.hxx index 64a3e35..388782a 100644 --- a/ememory/details/SharedPtr.hxx +++ b/ememory/details/SharedPtr.hxx @@ -194,7 +194,6 @@ void ememory::SharedPtr::reset() { delete m_counter; if (m_deleter != nullptr) { if (m_element != nullptr) { - //EMEMORY_ERROR("FREE 1 : " << std::hex << (uint64_t)m_element); m_deleter((void*)m_element); } } else { @@ -204,7 +203,6 @@ void ememory::SharedPtr::reset() { case ememory::Counter::remove::data: if (m_deleter != nullptr) { if (m_element != nullptr) { - //EMEMORY_ERROR("FREE 2 : " << std::hex << (uint64_t)m_element); m_deleter((void*)m_element); } } else { diff --git a/ememory/details/WeakPtr.hxx b/ememory/details/WeakPtr.hxx index 63b97d9..3542705 100644 --- a/ememory/details/WeakPtr.hxx +++ b/ememory/details/WeakPtr.hxx @@ -5,7 +5,6 @@ */ #pragma once -#include #include #include #include @@ -259,7 +258,7 @@ ememory::SharedPtr ememory::WeakPtr::lock() { } out.m_counter = m_counter; out.m_element = m_element; - return std::move(out); + return etk::move(out); } template diff --git a/ememory/memory.hpp b/ememory/memory.hpp index 98deadb..d8db637 100644 --- a/ememory/memory.hpp +++ b/ememory/memory.hpp @@ -22,7 +22,7 @@ namespace ememory { */ template static ememory::SharedPtr makeShared(EMEMORY_ARGS && ..._args) { - return ememory::SharedPtr(new EMEMORY_TYPE(std::forward(_args)...)); + return ememory::SharedPtr(new EMEMORY_TYPE(etk::forward(_args)...)); } /** * @brief Cast in Dynamic the input SharedPtr into an other type like dynamic_cast on pointer