forked from boostorg/unordered
Update test fancy pointers to be Nullable, add rebind alias template
This commit is contained in:
@ -458,6 +458,7 @@ template <class T> class ptr
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
ptr() : ptr_(0) {}
|
ptr() : ptr_(0) {}
|
||||||
|
ptr(std::nullptr_t) : ptr_(nullptr) {}
|
||||||
explicit ptr(void_ptr const& x) : ptr_((T*)x.ptr_) {}
|
explicit ptr(void_ptr const& x) : ptr_((T*)x.ptr_) {}
|
||||||
|
|
||||||
T& operator*() const { return *ptr_; }
|
T& operator*() const { return *ptr_; }
|
||||||
|
@ -307,6 +307,7 @@ namespace test {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
ptr() : ptr_(0) {}
|
ptr() : ptr_(0) {}
|
||||||
|
ptr(std::nullptr_t) : ptr_(0) {}
|
||||||
explicit ptr(void_ptr const& x) : ptr_((T*)x.ptr_) {}
|
explicit ptr(void_ptr const& x) : ptr_((T*)x.ptr_) {}
|
||||||
|
|
||||||
T& operator*() const { return *ptr_; }
|
T& operator*() const { return *ptr_; }
|
||||||
@ -325,6 +326,18 @@ namespace test {
|
|||||||
ptr operator+(std::ptrdiff_t s) const { return ptr<T>(ptr_ + s); }
|
ptr operator+(std::ptrdiff_t s) const { return ptr<T>(ptr_ + s); }
|
||||||
friend ptr operator+(std::ptrdiff_t s, ptr p) { return ptr<T>(s + p.ptr_); }
|
friend ptr operator+(std::ptrdiff_t s, ptr p) { return ptr<T>(s + p.ptr_); }
|
||||||
|
|
||||||
|
ptr& operator+=(std::ptrdiff_t s)
|
||||||
|
{
|
||||||
|
ptr_ += s;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr& operator-=(std::ptrdiff_t s)
|
||||||
|
{
|
||||||
|
ptr_ -= s;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
std::ptrdiff_t operator-(ptr p) const { return ptr_ - p.ptr_; }
|
std::ptrdiff_t operator-(ptr p) const { return ptr_ - p.ptr_; }
|
||||||
ptr operator-(std::ptrdiff_t s) const { return ptr(ptr_ - s); }
|
ptr operator-(std::ptrdiff_t s) const { return ptr(ptr_ - s); }
|
||||||
T& operator[](std::ptrdiff_t s) const { return ptr_[s]; }
|
T& operator[](std::ptrdiff_t s) const { return ptr_[s]; }
|
||||||
@ -340,6 +353,8 @@ namespace test {
|
|||||||
|
|
||||||
bool operator==(ptr const& x) const { return ptr_ == x.ptr_; }
|
bool operator==(ptr const& x) const { return ptr_ == x.ptr_; }
|
||||||
bool operator!=(ptr const& x) const { return ptr_ != x.ptr_; }
|
bool operator!=(ptr const& x) const { return ptr_ != x.ptr_; }
|
||||||
|
bool operator==(std::nullptr_t) const { return ptr_ == nullptr; }
|
||||||
|
bool operator!=(std::nullptr_t) const { return ptr_ != nullptr; }
|
||||||
bool operator<(ptr const& x) const { return ptr_ < x.ptr_; }
|
bool operator<(ptr const& x) const { return ptr_ < x.ptr_; }
|
||||||
bool operator>(ptr const& x) const { return ptr_ > x.ptr_; }
|
bool operator>(ptr const& x) const { return ptr_ > x.ptr_; }
|
||||||
bool operator<=(ptr const& x) const { return ptr_ <= x.ptr_; }
|
bool operator<=(ptr const& x) const { return ptr_ <= x.ptr_; }
|
||||||
@ -660,6 +675,9 @@ namespace boost {
|
|||||||
{
|
{
|
||||||
typedef ::test::minimal::ptr<U> type;
|
typedef ::test::minimal::ptr<U> type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<class U>
|
||||||
|
using rebind=typename rebind_to<U>::type;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,6 +16,9 @@
|
|||||||
#include <boost/limits.hpp>
|
#include <boost/limits.hpp>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
|
||||||
|
template <class T> struct allocator1;
|
||||||
|
template <class T> struct allocator2;
|
||||||
|
|
||||||
namespace test {
|
namespace test {
|
||||||
// Note that the default hash function will work for any equal_to (but not
|
// Note that the default hash function will work for any equal_to (but not
|
||||||
// very well).
|
// very well).
|
||||||
@ -506,14 +509,18 @@ namespace test {
|
|||||||
|
|
||||||
template <class T> class ptr
|
template <class T> class ptr
|
||||||
{
|
{
|
||||||
|
friend struct ::allocator1<T>;
|
||||||
|
friend struct ::allocator2<T>;
|
||||||
friend class allocator2<T>;
|
friend class allocator2<T>;
|
||||||
friend class const_ptr<T>;
|
friend class const_ptr<T>;
|
||||||
friend struct void_ptr;
|
friend struct void_ptr;
|
||||||
|
|
||||||
public:
|
|
||||||
T* ptr_;
|
T* ptr_;
|
||||||
ptr(T* x) : ptr_(x) {}
|
ptr(T* x) : ptr_(x) {}
|
||||||
|
|
||||||
|
public:
|
||||||
ptr() : ptr_(0) {}
|
ptr() : ptr_(0) {}
|
||||||
|
ptr(std::nullptr_t) : ptr_(nullptr) {}
|
||||||
explicit ptr(void_ptr const& x) : ptr_((T*)x.ptr_) {}
|
explicit ptr(void_ptr const& x) : ptr_((T*)x.ptr_) {}
|
||||||
|
|
||||||
T& operator*() const { return *ptr_; }
|
T& operator*() const { return *ptr_; }
|
||||||
@ -537,6 +544,7 @@ namespace test {
|
|||||||
ptr operator-(std::ptrdiff_t s) const { return ptr(ptr_ - s); }
|
ptr operator-(std::ptrdiff_t s) const { return ptr(ptr_ - s); }
|
||||||
|
|
||||||
ptr& operator+=(std::ptrdiff_t s) { ptr_ += s; return *this; }
|
ptr& operator+=(std::ptrdiff_t s) { ptr_ += s; return *this; }
|
||||||
|
ptr& operator-=(std::ptrdiff_t s) { ptr_ -= s; return *this; }
|
||||||
|
|
||||||
T& operator[](std::ptrdiff_t s) const { return ptr_[s]; }
|
T& operator[](std::ptrdiff_t s) const { return ptr_[s]; }
|
||||||
bool operator!() const { return !ptr_; }
|
bool operator!() const { return !ptr_; }
|
||||||
@ -727,6 +735,9 @@ namespace boost {
|
|||||||
{
|
{
|
||||||
typedef ::test::ptr<U> type;
|
typedef ::test::ptr<U> type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<class U>
|
||||||
|
using rebind=typename rebind_to<U>::type;
|
||||||
};
|
};
|
||||||
} // namespace boost
|
} // namespace boost
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user