clone
Short summary
This method is used to create a new instance
of the object which has the same internal state as the object.
If the object is a container class, the references to the content objects
are not cloned for this there is the method ICloneable.deepClone.
If an object does not support cloning the return value is
CNM_ReturnTypes.CloneResult.CLONE_IS_NOT_SUPPORTED.
If there is not enough memory or the cloning fails because the
attribute enable dynamic creation was forgotten the return value is
CNM_ReturnTypes.CloneResult.FAILED.
Only if the return value is CNM_ReturnTypes.CloneResult.SUCCESS
the output clonedObject points to the new object
otherwise clonedObject is NULL.
Return: CNM_ReturnTypes.CloneResult.SUCCESS: new object clone was created,
CNM_ReturnTypes.CloneResult.FAILED: object clone failed
CNM_ReturnTypes.CloneResult.CLONE_IS_NOT_SUPPORTED: object does not support cloning
- Return type: CNM_AbstractObject.CNM_ReturnTypes.CloneResult
Parameters
| Name | Type | Comment | Kind |
|---|---|---|---|
| clonedObject | CNM_AbstractObject.IObject | new object instance or NULL if somthing went wrong | output |
Code
Declaration
METHOD clone :CNM_AbstractObject.CNM_ReturnTypes.CloneResult
VAR_OUTPUT
(* new object instance or NULL if somthing went wrong *)
clonedObject :CNM_AbstractObject.IObject;
END_VAR
VAR
newBalancedBinarySearchTree :POINTER TO BalancedBinarySearchTree;
newRootObject :CNM_AbstractObject.IObject;
newRoot : CNM_CollectionInterfaces.IBalancedBinarySearchTreeNode;
END_VAR
VAR CONSTANT
OBJECT_NOT_REFERENCED :__XWORD := 0;
END_VAR
Implementation
clone := THIS^.getClonedEmptyTree(deepCloned := FALSE,newBalancedBinarySearchTree => newBalancedBinarySearchTree);
clonedObject := OBJECT_NOT_REFERENCED;
IF (clone = CNM_ReturnTypes.CloneResult.SUCCESS) THEN
IF (THIS^.size > 0) THEN
clone := THIS^.root.clone(clonedObject => newRootObject);
IF clone = CNM_ReturnTypes.CloneResult.SUCCESS THEN
__QUERYINTERFACE(newRootObject,newRoot);
newBalancedBinarySearchTree^.root := newRoot;
newBalancedBinarySearchTree^.size := THIS^.size;
ELSE
newBalancedBinarySearchTree^.destruct();
RETURN;
END_IF
END_IF
clonedObject := newBalancedBinarySearchTree^;
END_IF