[DEBUG] correct some errors

This commit is contained in:
Edouard DUPIN 2016-07-15 21:22:11 +02:00
parent 39e7d4103e
commit f2dd438a7d
6 changed files with 57 additions and 4 deletions

View File

@ -16,7 +16,7 @@ namespace ememory {
class EnableSharedFromThis { class EnableSharedFromThis {
friend class ememory::SharedPtr<EMEMORY_TYPE>; friend class ememory::SharedPtr<EMEMORY_TYPE>;
private: private:
ememory::WeakPtr<EMEMORY_TYPE> m_weakThis; mutable ememory::WeakPtr<EMEMORY_TYPE> m_weakThis;
protected: protected:
EnableSharedFromThis(); EnableSharedFromThis();
virtual ~EnableSharedFromThis() = default; virtual ~EnableSharedFromThis() = default;

View File

@ -33,6 +33,7 @@ namespace ememory {
, int>::type = 0> , int>::type = 0>
SharedPtr(EMEMORY_TYPE2* _element); SharedPtr(EMEMORY_TYPE2* _element);
public: public:
SharedPtr(std::nullptr_t);
SharedPtr(); SharedPtr();
~SharedPtr(); ~SharedPtr();
SharedPtr(EMEMORY_TYPE* _obj, ememory::Counter* _counter); SharedPtr(EMEMORY_TYPE* _obj, ememory::Counter* _counter);
@ -58,9 +59,25 @@ namespace ememory {
bool operator!=(const SharedPtr<EMEMORY_TYPE>& _obj) const; bool operator!=(const SharedPtr<EMEMORY_TYPE>& _obj) const;
const EMEMORY_TYPE* get() const; const EMEMORY_TYPE* get() const;
EMEMORY_TYPE* get(); EMEMORY_TYPE* get();
template<class EMEMORY_TYPE2 = EMEMORY_TYPE,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
, int>::type = 0>
const EMEMORY_TYPE* operator->() const; const EMEMORY_TYPE* operator->() const;
template<class EMEMORY_TYPE2 = EMEMORY_TYPE,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
, int>::type = 0>
EMEMORY_TYPE* operator->(); EMEMORY_TYPE* operator->();
template<class EMEMORY_TYPE2 = EMEMORY_TYPE,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
, int>::type = 0>
const EMEMORY_TYPE& operator*() const; const EMEMORY_TYPE& operator*() const;
template<class EMEMORY_TYPE2 = EMEMORY_TYPE,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
, int>::type = 0>
EMEMORY_TYPE& operator*(); EMEMORY_TYPE& operator*();
void swap(SharedPtr<EMEMORY_TYPE>& _obj); void swap(SharedPtr<EMEMORY_TYPE>& _obj);
ememory::Counter* getCounter() const { ememory::Counter* getCounter() const {

View File

@ -22,6 +22,7 @@ namespace ememory {
ememory::Counter* m_counter; ememory::Counter* m_counter;
public: public:
WeakPtr(); WeakPtr();
WeakPtr(std::nullptr_t);
private: private:
WeakPtr(EMEMORY_TYPE* _element); // this is only for enable shared from this ... WeakPtr(EMEMORY_TYPE* _element); // this is only for enable shared from this ...
public: public:

View File

@ -57,6 +57,13 @@ ememory::SharedPtr<EMEMORY_TYPE>::SharedPtr():
EMEMORY_VERBOSE("new shared"); EMEMORY_VERBOSE("new shared");
} }
template<typename EMEMORY_TYPE>
ememory::SharedPtr<EMEMORY_TYPE>::SharedPtr(std::nullptr_t):
m_element(nullptr),
m_counter(nullptr) {
EMEMORY_VERBOSE("new shared");
}
template<typename EMEMORY_TYPE> template<typename EMEMORY_TYPE>
ememory::SharedPtr<EMEMORY_TYPE>::SharedPtr(EMEMORY_TYPE* _obj, ememory::Counter* _counter): ememory::SharedPtr<EMEMORY_TYPE>::SharedPtr(EMEMORY_TYPE* _obj, ememory::Counter* _counter):
m_element(_obj), m_element(_obj),
@ -228,21 +235,37 @@ EMEMORY_TYPE* ememory::SharedPtr<EMEMORY_TYPE>::get() {
} }
template<typename EMEMORY_TYPE> template<typename EMEMORY_TYPE>
template<class EMEMORY_TYPE2,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
, int>::type>
const EMEMORY_TYPE* ememory::SharedPtr<EMEMORY_TYPE>::operator->() const { const EMEMORY_TYPE* ememory::SharedPtr<EMEMORY_TYPE>::operator->() const {
return m_element; return m_element;
} }
template<typename EMEMORY_TYPE> template<typename EMEMORY_TYPE>
template<class EMEMORY_TYPE2,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
, int>::type>
EMEMORY_TYPE* ememory::SharedPtr<EMEMORY_TYPE>::operator->() { EMEMORY_TYPE* ememory::SharedPtr<EMEMORY_TYPE>::operator->() {
return m_element; return m_element;
} }
template<typename EMEMORY_TYPE> template<typename EMEMORY_TYPE>
template<class EMEMORY_TYPE2,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
, int>::type>
const EMEMORY_TYPE& ememory::SharedPtr<EMEMORY_TYPE>::operator*() const { const EMEMORY_TYPE& ememory::SharedPtr<EMEMORY_TYPE>::operator*() const {
return *m_element; return *m_element;
} }
template<typename EMEMORY_TYPE> template<typename EMEMORY_TYPE>
template<class EMEMORY_TYPE2,
typename std::enable_if< std::is_same<EMEMORY_TYPE2, EMEMORY_TYPE>::value
&& !std::is_same<EMEMORY_TYPE2, void>::value
, int>::type>
EMEMORY_TYPE& ememory::SharedPtr<EMEMORY_TYPE>::operator*() { EMEMORY_TYPE& ememory::SharedPtr<EMEMORY_TYPE>::operator*() {
return *m_element; return *m_element;
} }

View File

@ -17,6 +17,13 @@ ememory::WeakPtr<EMEMORY_TYPE>::WeakPtr():
} }
template<typename EMEMORY_TYPE>
ememory::WeakPtr<EMEMORY_TYPE>::WeakPtr(std::nullptr_t):
m_element(nullptr),
m_counter(nullptr) {
}
template<typename EMEMORY_TYPE> template<typename EMEMORY_TYPE>
ememory::WeakPtr<EMEMORY_TYPE>::WeakPtr(EMEMORY_TYPE* _element): ememory::WeakPtr<EMEMORY_TYPE>::WeakPtr(EMEMORY_TYPE* _element):
m_element(_element), m_element(_element),

View File

@ -24,7 +24,7 @@ namespace ememory {
} }
template<class EMEMORY_TYPE_CAST, class EMEMORY_TYPE> template<class EMEMORY_TYPE_CAST, class EMEMORY_TYPE>
inline const ememory::SharedPtr<EMEMORY_TYPE_CAST> dynamicPointerCast(const ememory::SharedPtr<EMEMORY_TYPE>& _obj) { inline const ememory::SharedPtr<EMEMORY_TYPE_CAST> dynamicPointerCast(const ememory::SharedPtr<EMEMORY_TYPE>& _obj) {
return ememory::SharedPtr<EMEMORY_TYPE_CAST>(dynamic_cast<EMEMORY_TYPE_CAST*>(_obj.get()), _obj.getCounter()); return ememory::SharedPtr<EMEMORY_TYPE_CAST>(dynamic_cast<EMEMORY_TYPE_CAST*>(const_cast<EMEMORY_TYPE*>(_obj.get())), _obj.getCounter());
} }
template<class EMEMORY_TYPE_CAST, class EMEMORY_TYPE> template<class EMEMORY_TYPE_CAST, class EMEMORY_TYPE>
@ -33,7 +33,7 @@ namespace ememory {
} }
template<class EMEMORY_TYPE_CAST, class EMEMORY_TYPE> template<class EMEMORY_TYPE_CAST, class EMEMORY_TYPE>
inline const ememory::SharedPtr<EMEMORY_TYPE_CAST> staticPointerCast(const ememory::SharedPtr<EMEMORY_TYPE>& _obj) { inline const ememory::SharedPtr<EMEMORY_TYPE_CAST> staticPointerCast(const ememory::SharedPtr<EMEMORY_TYPE>& _obj) {
return ememory::SharedPtr<EMEMORY_TYPE_CAST>(static_cast<EMEMORY_TYPE_CAST*>(_obj.get()), _obj.getCounter()); return ememory::SharedPtr<EMEMORY_TYPE_CAST>(static_cast<EMEMORY_TYPE_CAST*>(const_cast<EMEMORY_TYPE*>(_obj.get())), _obj.getCounter());
} }
template<class EMEMORY_TYPE_CAST, class EMEMORY_TYPE> template<class EMEMORY_TYPE_CAST, class EMEMORY_TYPE>
@ -42,6 +42,11 @@ namespace ememory {
} }
template<class EMEMORY_TYPE_CAST, class EMEMORY_TYPE> template<class EMEMORY_TYPE_CAST, class EMEMORY_TYPE>
inline const ememory::SharedPtr<EMEMORY_TYPE_CAST> reinterpretPointerCast(const ememory::SharedPtr<EMEMORY_TYPE>& _obj) { inline const ememory::SharedPtr<EMEMORY_TYPE_CAST> reinterpretPointerCast(const ememory::SharedPtr<EMEMORY_TYPE>& _obj) {
return ememory::SharedPtr<EMEMORY_TYPE_CAST>(reinterpret_cast<EMEMORY_TYPE_CAST*>(_obj.get()), _obj.getCounter()); return ememory::SharedPtr<EMEMORY_TYPE_CAST>(reinterpret_cast<EMEMORY_TYPE_CAST*>(const_cast<EMEMORY_TYPE*>(_obj.get())), _obj.getCounter());
}
template<class EMEMORY_TYPE_CAST, class EMEMORY_TYPE>
inline ememory::SharedPtr<EMEMORY_TYPE_CAST> constPointerCast(const ememory::SharedPtr<EMEMORY_TYPE>& _obj) {
return ememory::SharedPtr<EMEMORY_TYPE_CAST>(const_cast<EMEMORY_TYPE*>(_obj.get()), _obj.getCounter());
} }
} }