| --- | --- |
| Bugzilla Link | 465688 |
| Status | RESOLVED FIXED |
| Importance | P3 normal |
| Reported | Apr 28, 2015 09:20 EDT |
| Modified | Jan 02, 2016 13:42 EDT |
| Reporter | Ed Willink |
Description
When the compile time scheduler cannot guarantee to invoke mappings just once, repeated invocation may be necessary to pick up new objects or just tolerate the absence of a termination condition.
This can be represented by a Boolean isInfinite flag in the MappingCall.
When this flag is set, the runtime must \
a) track all nested invocations so that repeated invocations are suppressed.\
b) terminate the infinite loop once all further invocations are suppressed re-invocations.
Simple examples:
A recursion over a composition tree can use a looping mapping call and guarantee termination. isInfinite = false.
A recursion over a reference cycle can use a looping mapping call but cannot guarantee termination. isInfinite = true to visit each node just once.
A flat schedule loops over everything till done. The root therefore invokes every mapping once on every object, then invokes itself to loop till done. isInfinite = true to stop when nothing left to do.
| --- | --- | | Bugzilla Link | 465688 | | Status | RESOLVED FIXED | | Importance | P3 normal | | Reported | Apr 28, 2015 09:20 EDT | | Modified | Jan 02, 2016 13:42 EDT | | Reporter | Ed Willink |
Description
When the compile time scheduler cannot guarantee to invoke mappings just once, repeated invocation may be necessary to pick up new objects or just tolerate the absence of a termination condition.
This can be represented by a Boolean isInfinite flag in the MappingCall.
When this flag is set, the runtime must \ a) track all nested invocations so that repeated invocations are suppressed.\ b) terminate the infinite loop once all further invocations are suppressed re-invocations.
Simple examples:
A recursion over a composition tree can use a looping mapping call and guarantee termination. isInfinite = false.
A recursion over a reference cycle can use a looping mapping call but cannot guarantee termination. isInfinite = true to visit each node just once.
A flat schedule loops over everything till done. The root therefore invokes every mapping once on every object, then invokes itself to loop till done. isInfinite = true to stop when nothing left to do.