You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by to...@apache.org on 2016/01/23 03:38:05 UTC
incubator-kudu git commit: Support move constructor and assignment
operator in scoped_refptr
Repository: incubator-kudu
Updated Branches:
refs/heads/master 75d724451 -> 690f3594d
Support move constructor and assignment operator in scoped_refptr
This is a port over of 4c3de21a3dcdd9e27a770572350eeaa98cdb9e87 from
the chromium-base repository.
The port isn't 100% -- on their side they added a .Pass() to scoped_refptr.
However, I think in our case we should just use std::move() for this use case.
Change-Id: I339c9f6c3bfc0fcacd44aa53bdd75d723b9aab47
Reviewed-on: http://gerrit.cloudera.org:8080/1870
Tested-by: Todd Lipcon <to...@apache.org>
Reviewed-by: Dan Burkert <da...@cloudera.com>
Project: http://git-wip-us.apache.org/repos/asf/incubator-kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-kudu/commit/690f3594
Tree: http://git-wip-us.apache.org/repos/asf/incubator-kudu/tree/690f3594
Diff: http://git-wip-us.apache.org/repos/asf/incubator-kudu/diff/690f3594
Branch: refs/heads/master
Commit: 690f3594db9f27bc77186a1216d20e5c83e4bb27
Parents: 75d7244
Author: Todd Lipcon <to...@apache.org>
Authored: Thu Jan 21 19:02:02 2016 -0800
Committer: Todd Lipcon <to...@apache.org>
Committed: Sat Jan 23 02:33:49 2016 +0000
----------------------------------------------------------------------
src/kudu/gutil/ref_counted.h | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/690f3594/src/kudu/gutil/ref_counted.h
----------------------------------------------------------------------
diff --git a/src/kudu/gutil/ref_counted.h b/src/kudu/gutil/ref_counted.h
index 875ddc5..8b6a553 100644
--- a/src/kudu/gutil/ref_counted.h
+++ b/src/kudu/gutil/ref_counted.h
@@ -245,6 +245,11 @@ class scoped_refptr {
ptr_->AddRef();
}
+ template <typename U>
+ scoped_refptr(scoped_refptr<U>&& r) : ptr_(r.get()) {
+ r.ptr_ = nullptr;
+ }
+
~scoped_refptr() {
if (ptr_)
ptr_->Release();
@@ -289,6 +294,17 @@ class scoped_refptr {
return *this = r.get();
}
+ scoped_refptr<T>& operator=(scoped_refptr<T>&& r) {
+ scoped_refptr<T>(r).swap(*this);
+ return *this;
+ }
+
+ template <typename U>
+ scoped_refptr<T>& operator=(scoped_refptr<U>&& r) {
+ scoped_refptr<T>(r).swap(*this);
+ return *this;
+ }
+
void swap(T** pp) {
T* p = ptr_;
ptr_ = *pp;
@@ -307,6 +323,9 @@ class scoped_refptr {
protected:
T* ptr_;
+
+ private:
+ template <typename U> friend class scoped_refptr;
};
// Handy utility for creating a scoped_refptr<T> out of a T* explicitly without