aboutsummaryrefslogtreecommitdiff
path: root/cutl/shared-ptr.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'cutl/shared-ptr.hxx')
-rw-r--r--cutl/shared-ptr.hxx157
1 files changed, 0 insertions, 157 deletions
diff --git a/cutl/shared-ptr.hxx b/cutl/shared-ptr.hxx
deleted file mode 100644
index 62dfb62..0000000
--- a/cutl/shared-ptr.hxx
+++ /dev/null
@@ -1,157 +0,0 @@
-// file : cutl/shared-ptr.hxx
-// license : MIT; see accompanying LICENSE file
-
-#ifndef CUTL_SHARED_PTR_HXX
-#define CUTL_SHARED_PTR_HXX
-
-#include <cutl/shared-ptr/base.hxx>
-
-namespace cutl
-{
- template <typename X>
- class shared_ptr: bits::counter_ops<typename bits::counter_type<X>::r, X>
- {
- typedef bits::counter_ops<typename bits::counter_type<X>::r, X> base;
-
- public:
- ~shared_ptr ()
- {
- if (x_ != 0)
- base::dec (x_);
- }
-
- explicit
- shared_ptr (X* x = 0)
- : base (x), x_ (x)
- {
- }
-
- shared_ptr (shared_ptr const& x)
- : base (x), x_ (x.x_)
- {
- if (x_ != 0)
- base::inc (x_);
- }
-
- template <typename Y>
- shared_ptr (shared_ptr<Y> const& x)
- : base (x), x_ (x.x_)
- {
- if (x_ != 0)
- base::inc (x_);
- }
-
- shared_ptr&
- operator= (shared_ptr const& x)
- {
- if (x_ != x.x_)
- {
- if (x_ != 0)
- base::dec (x_);
-
- static_cast<base&> (*this) = x;
- x_ = x.x_;
-
- if (x_ != 0)
- base::inc (x_);
- }
-
- return *this;
- }
-
- template <typename Y>
- shared_ptr&
- operator= (shared_ptr<Y> const& x)
- {
- if (x_ != x.x_)
- {
- if (x_ != 0)
- base::dec (x_);
-
- static_cast<base&> (*this) = x;
- x_ = x.x_;
-
- if (x_ != 0)
- base::inc (x_);
- }
-
- return *this;
- }
-
- public:
- X*
- operator-> () const
- {
- return x_;
- }
-
- X&
- operator* () const
- {
- return *x_;
- }
-
- // Conversion to bool.
- //
- typedef void (shared_ptr::*boolean_convertible)();
- void true_value () {};
-
- operator boolean_convertible () const
- {
- return x_ ? &shared_ptr<X>::true_value : 0;
- }
-
- public:
- X*
- get () const
- {
- return x_;
- }
-
- X*
- release ()
- {
- X* r (x_);
- x_ = 0;
- return r;
- }
-
- void
- reset (X* x = 0)
- {
- if (x_ != 0)
- base::dec (x_);
-
- base::reset (x);
- x_ = x;
- }
-
- std::size_t
- count () const
- {
- return x_ != 0 ? base::count (x_) : 0;
- }
-
- private:
- template <typename>
- friend class shared_ptr;
-
- X* x_;
- };
-
- template <typename X, typename Y>
- inline bool
- operator== (const shared_ptr<X>& x, const shared_ptr<Y>& y)
- {
- return x.get () == y.get ();
- }
-
- template <typename X, typename Y>
- inline bool
- operator!= (const shared_ptr<X>& x, const shared_ptr<Y>& y)
- {
- return x.get () != y.get ();
- }
-}
-
-#endif // CUTL_SHARED_PTR_HXX