Skip to main content

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

Parameters

NameTypeCommentKind
setCNM_CollectionInterfaces.ISetforeign set to construct substractioninput

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();