summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2014-03-13 23:54:54 +0100
committerEmiel Bruijntjes <emiel.bruijntjes@copernica.com>2014-03-13 23:54:54 +0100
commit681d1e6aa735568a492140d2307a89063e7aadb9 (patch)
tree98fa482ee64203b1ef75fb0e7c687d57f1abe20f /include
parent684f81e8bcbadc3d522e6557161275deaad4fd3b (diff)
__clone() method is now called directly after a clone operation (and when no custom __clone is registered)
Diffstat (limited to 'include')
-rw-r--r--include/base.h14
-rw-r--r--include/class.h28
-rw-r--r--include/classbase.h7
3 files changed, 48 insertions, 1 deletions
diff --git a/include/base.h b/include/base.h
index 6cf75df..b9dced2 100644
--- a/include/base.h
+++ b/include/base.h
@@ -113,6 +113,20 @@ public:
}
/**
+ * Overridable method that is called right after an object is cloned
+ *
+ * The default implementation does nothing
+ */
+ void __clone() const {}
+
+ /**
+ * Overridable method that is called right before an object is destructed
+ *
+ * The default implementation does nothing
+ */
+ void __destruct() const {}
+
+ /**
* Overridable method that is called to check if a property is set
*
* The default implementation does nothing, and the script will fall back
diff --git a/include/class.h b/include/class.h
index 9fa14a7..f8e3365 100644
--- a/include/class.h
+++ b/include/class.h
@@ -235,6 +235,32 @@ private:
}
/**
+ * Call the __clone method
+ * @param base
+ */
+ virtual void callClone(Base *base) const
+ {
+ // cast to the user object
+ T *object = (T *)base;
+
+ // call the method on the base object
+ return object->__clone();
+ }
+
+ /**
+ * Call the __destruct method
+ * @param base
+ */
+ virtual void callDestruct(Base *base) const
+ {
+ // cast to the user object
+ T *object = (T *)base;
+
+ // call the method on the base object
+ return object->__destruct();
+ }
+
+ /**
* Call a method
* @param base Object to call on
* @param name Name of the method
@@ -247,7 +273,7 @@ private:
T *object = (T *)base;
// call the method on the base object
- return base->__call(name, params);
+ return object->__call(name, params);
}
/**
diff --git a/include/classbase.h b/include/classbase.h
index 0ea6ea4..fac9dbd 100644
--- a/include/classbase.h
+++ b/include/classbase.h
@@ -150,6 +150,13 @@ protected:
virtual int callCompare(Base *object1, Base *object2) const { return 1; }
/**
+ * Call the __clone and __destruct magic methods
+ * @param base
+ */
+ virtual void callClone(Base *base) const {}
+ virtual void callDestruct(Base *base) const {}
+
+ /**
* Call the __call(), __invoke() or __callStatic() method
* @param base Object to call on
* @param name Name of the method