Mesa (master): clover/util: Implement minimalist reference to clover:: ref_counter object.
Francisco Jerez
currojerez at kemper.freedesktop.org
Mon Aug 18 06:40:03 UTC 2014
Module: Mesa
Branch: master
Commit: 37e4d22e957b59483ecbec4c036476f944a584dc
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=37e4d22e957b59483ecbec4c036476f944a584dc
Author: Francisco Jerez <currojerez at riseup.net>
Date: Sun Aug 17 23:18:45 2014 +0300
clover/util: Implement minimalist reference to clover::ref_counter object.
Tested-by: EdB <edb+mesa at sigluy.net>
---
src/gallium/state_trackers/clover/util/pointer.hpp | 45 ++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/src/gallium/state_trackers/clover/util/pointer.hpp b/src/gallium/state_trackers/clover/util/pointer.hpp
index 59c6e6e..b790fd4 100644
--- a/src/gallium/state_trackers/clover/util/pointer.hpp
+++ b/src/gallium/state_trackers/clover/util/pointer.hpp
@@ -53,6 +53,51 @@ namespace clover {
};
///
+ /// Simple reference to a clover::ref_counter object. Unlike
+ /// clover::intrusive_ptr and clover::intrusive_ref, it does nothing
+ /// special when the reference count drops to zero.
+ ///
+ class ref_holder {
+ public:
+ ref_holder(ref_counter &o) : p(&o) {
+ p->retain();
+ }
+
+ ref_holder(const ref_holder &ref) :
+ ref_holder(*ref.p) {
+ }
+
+ ref_holder(ref_holder &&ref) :
+ p(ref.p) {
+ ref.p = NULL;
+ }
+
+ ~ref_holder() {
+ if (p)
+ p->release();
+ }
+
+ ref_holder &
+ operator=(ref_holder ref) {
+ std::swap(ref.p, p);
+ return *this;
+ }
+
+ bool
+ operator==(const ref_holder &ref) const {
+ return p == ref.p;
+ }
+
+ bool
+ operator!=(const ref_holder &ref) const {
+ return p != ref.p;
+ }
+
+ private:
+ ref_counter *p;
+ };
+
+ ///
/// Intrusive smart pointer for objects that implement the
/// clover::ref_counter interface.
///
More information about the mesa-commit
mailing list