From 7f3437a771ae421f7f9dddc0b945c12e94d7a8c4 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 4 Jun 2010 16:16:30 +0200 Subject: Add reset() to shared_ptr --- cutl/shared-ptr.hxx | 10 ++++++++++ cutl/shared-ptr/base.txx | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/cutl/shared-ptr.hxx b/cutl/shared-ptr.hxx index 0fc948b..de85447 100644 --- a/cutl/shared-ptr.hxx +++ b/cutl/shared-ptr.hxx @@ -118,6 +118,16 @@ namespace cutl return r; } + void + reset (X* x) + { + if (x_ != 0) + base::dec (x_); + + base::reset (x); + x_ = x; + } + std::size_t count () const { diff --git a/cutl/shared-ptr/base.txx b/cutl/shared-ptr/base.txx index 92ffa17..dae6083 100644 --- a/cutl/shared-ptr/base.txx +++ b/cutl/shared-ptr/base.txx @@ -103,6 +103,12 @@ namespace cutl } void + reset (X const* p) + { + counter_ = p ? bits::counter (p) : 0; + } + + void inc (X*) { (*counter_)++; @@ -133,6 +139,9 @@ namespace cutl counter_ops (Y const*) {} void + reset (Y const*) {} + + void inc (shared_base* p) {p->_inc_ref ();} void -- cgit v1.1