instantSubtract
Short summary
overwrites the content of this set with the set difference of this set and the given set Set difference: Elements present in one set but not in the other.
Example: Set A = 4 Set B = 4
Set difference (A - B): 2 Set difference (B - A): 6
Return: SingleExecutionResult.SUCCESS: if insert could made, error if object was already in the tree,
```SingleExecutionResult.ABORTED``: foreign set wasn't valid
- Return type: CNM_ReturnTypes.SingleExecutionResult
Parameters
| Name | Type | Comment | Kind |
|---|---|---|---|
| set | CNM_CollectionInterfaces.ISet | foreign set to construct substraction | input |
Code
Declaration
METHOD INTERNAL instantSubtract : CNM_ReturnTypes.SingleExecutionResult
VAR_INPUT
(*foreign set to construct substraction*)
set : CNM_CollectionInterfaces.ISet;
END_VAR
VAR
iterator :CNM_CollectionInterfaces.IIterator;
objectToRemove :CNM_AbstractObject.IObject;
iteratorState :CNM_ReturnTypes.SingleExecutionState;
END_VAR
Implementation
instantSubtract := CNM_ReturnTypes.SingleExecutionResult.ABORTED;
RETURN(THIS^.isObjectNull(set) OR_ELSE THIS^.isEqual(set));
instantSubtract := CNM_ReturnTypes.SingleExecutionResult.ERROR;
IF( set.createNewIterator(iterator => iterator) <> CNM_ReturnTypes.SingleExecutionResult.SUCCESS) THEN
IF iterator <> 0 THEN
iterator.destruct();
END_IF
END_IF
iterator.iterate(FALSE);
instantSubtract := CNM_ReturnTypes.SingleExecutionResult.SUCCESS;
REPEAT
iteratorState := iterator.iterate(execute := TRUE, object => objectToRemove);
CASE iteratorState OF
CNM_ReturnTypes.SingleExecutionState.BUSY:
THIS^.remove(objectToRemove);
CNM_ReturnTypes.SingleExecutionState.ERROR:
instantSubtract := CNM_ReturnTypes.SingleExecutionResult.ERROR;
EXIT;
END_CASE
UNTIL
(iteratorState = CNM_ReturnTypes.SingleExecutionState.SUCCESS)
END_REPEAT
iterator.destruct();