[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 {
friend class ememory::SharedPtr<EMEMORY_TYPE>;
private:
ememory::WeakPtr<EMEMORY_TYPE> m_weakThis;
mutable ememory::WeakPtr<EMEMORY_TYPE> m_weakThis;
protected:
EnableSharedFromThis();
virtual ~EnableSharedFromThis() = default;

View File

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

View File

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

View File

@ -57,6 +57,13 @@ ememory::SharedPtr<EMEMORY_TYPE>::SharedPtr():
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>
ememory::SharedPtr<EMEMORY_TYPE>::SharedPtr(EMEMORY_TYPE* _obj, ememory::Counter* _counter):
m_element(_obj),
@ -228,21 +235,37 @@ EMEMORY_TYPE* ememory::SharedPtr<EMEMORY_TYPE>::get() {
}
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 {
return m_element;
}
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->() {
return m_element;
}
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 {
return *m_element;
}
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*() {
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>
ememory::WeakPtr<EMEMORY_TYPE>::WeakPtr(EMEMORY_TYPE* _element):
m_element(_element),

View File

@ -24,7 +24,7 @@ namespace ememory {
}
template<class EMEMORY_TYPE_CAST, class EMEMORY_TYPE>
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>
@ -33,7 +33,7 @@ namespace ememory {
}
template<class EMEMORY_TYPE_CAST, class EMEMORY_TYPE>
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>
@ -42,6 +42,11 @@ namespace ememory {
}
template<class EMEMORY_TYPE_CAST, class EMEMORY_TYPE>
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());
}
}