diff options
author | Emiel Bruijntjes <emiel.bruijntjes@copernica.com> | 2014-03-13 23:54:54 +0100 |
---|---|---|
committer | Emiel Bruijntjes <emiel.bruijntjes@copernica.com> | 2014-03-13 23:54:54 +0100 |
commit | 681d1e6aa735568a492140d2307a89063e7aadb9 (patch) | |
tree | 98fa482ee64203b1ef75fb0e7c687d57f1abe20f /include | |
parent | 684f81e8bcbadc3d522e6557161275deaad4fd3b (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.h | 14 | ||||
-rw-r--r-- | include/class.h | 28 | ||||
-rw-r--r-- | include/classbase.h | 7 |
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 |