|
|
@ -29,9 +29,16 @@ public: |
|
|
|
~Wrapper(); |
|
|
|
|
|
|
|
Wrapper<T> copy() const; |
|
|
|
|
|
|
|
friend |
|
|
|
bool operator==(const Wrapper<T>& a, const Wrapper<T>& b); |
|
|
|
|
|
|
|
bool operator==(const Wrapper<T>& b) const |
|
|
|
{ |
|
|
|
return value==b.value; |
|
|
|
} |
|
|
|
|
|
|
|
bool operator!=(const Wrapper<T>& b) const |
|
|
|
{ |
|
|
|
return value!=b.value; |
|
|
|
} |
|
|
|
|
|
|
|
private: |
|
|
|
// must be defined for each wrapped type:
|
|
|
@ -78,11 +85,18 @@ public: |
|
|
|
_free(value); |
|
|
|
} |
|
|
|
|
|
|
|
bool operator==(const Wrapper<T*>& b) const |
|
|
|
{ |
|
|
|
return value==b.value; |
|
|
|
} |
|
|
|
|
|
|
|
bool operator!=(const Wrapper<T*>& b) const |
|
|
|
{ |
|
|
|
return value!=b.value; |
|
|
|
} |
|
|
|
|
|
|
|
const T* get() const { return value; } |
|
|
|
T* move_out() { T* r = value; value=nullptr; return r;} |
|
|
|
|
|
|
|
friend |
|
|
|
bool operator==(const Wrapper<T*>& a, const Wrapper<T*>& b); |
|
|
|
|
|
|
|
protected: |
|
|
|
|
|
|
@ -97,12 +111,6 @@ protected: |
|
|
|
T* value; |
|
|
|
}; |
|
|
|
|
|
|
|
template<class T> |
|
|
|
inline |
|
|
|
bool operator!=(const Wrapper<T>& a, const Wrapper<T>& b) |
|
|
|
{ |
|
|
|
return !(a==b); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Wraps single-linked lists and provides an interface compatible
|
|
|
|