]> git.stg.codes - stg.git/blobdiff - include/stg/resetable.h
Fix build on Darwin.
[stg.git] / include / stg / resetable.h
index c78d02476e5cbea97d9b80acd764a80aad8d1c61..e7914efd3e90fdfc958025ac0317589d06735163 100644 (file)
@@ -16,19 +16,7 @@ public:
     typedef T value_type;
 
     RESETABLE() : value(), is_set(false) {}
     typedef T value_type;
 
     RESETABLE() : value(), is_set(false) {}
-    RESETABLE(const T & v) : value(v), is_set(true) {}
-
-    RESETABLE(const RESETABLE<T> & rvalue)
-        : value(rvalue.value),
-          is_set(rvalue.is_set)
-    {}
-
-    RESETABLE<T> & operator=(const RESETABLE<T> & rhs)
-    {
-        value = rhs.value;
-        is_set = rhs.is_set;
-        return *this;
-    }
+    explicit RESETABLE(const T & v) : value(v), is_set(true) {}
 
     RESETABLE<T> & operator=(const T & rhs)
     {
 
     RESETABLE<T> & operator=(const T & rhs)
     {
@@ -42,6 +30,19 @@ public:
     const T & data() const throw() { return value; }
     bool empty() const throw() { return !is_set; }
     void reset() throw() { is_set = false; }
     const T & data() const throw() { return value; }
     bool empty() const throw() { return !is_set; }
     void reset() throw() { is_set = false; }
+    void splice(const RESETABLE<T> & rhs)
+    {
+        if (rhs.is_set)
+        {
+            value = rhs.value;
+            is_set = true;
+        }
+    }
+    void maybeSet(value_type& dest) const
+    {
+        if (is_set)
+            dest = value;
+    }
 
 private:
     value_type value;
 
 private:
     value_type value;