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