deferred class ABSTRACT_BACKTRACKING_ALTERNATIVE

All features

Abstract realisation of an alternative iterator for the ABSTRACT_BACKTRACKING

The ABSTRACT_BACKTRACKING uses the fields continuation and top_sequence to record its exploration state and calls the feature 'next_alternative' to let the current object choose how to continue the exploration.

Direct parents

conformant parents

ABSTRACT_BACKTRACKING_POOLABLE

Known children

conformant children

BACKTRACKING_ALTERNATIVE, BACKTRACKING_ALTERNATIVE_LIST

Summary

exported features

Details

previous: ABSTRACT_BACKTRACKING_ALTERNATIVE

For the linked stack of alternatives. Managed by ABSTRACT_BACKTRACKING.

continuation: ABSTRACT_BACKTRACKING_SEQUENCE

The sequence to continue after a success in exploration of the current alternative. Managed by ABSTRACT_BACKTRACKING.

set_continuation (value: ABSTRACT_BACKTRACKING_SEQUENCE)

ensure

  • definition: continuation = value

top_sequence: ABSTRACT_BACKTRACKING_SEQUENCE

Record of the top of the stack of sequence to restore the state of the exploration after that all alternatives were explored. Managed by ABSTRACT_BACKTRACKING.

set_top_sequence (value: ABSTRACT_BACKTRACKING_SEQUENCE)

ensure

  • definition: top_sequence = value

deferred next_alternative (explorer: ABSTRACT_BACKTRACKING)

Called by ABSTRACT_BACKTRACKING to let the current object switch to the next alternative to explore. Two actions must be performed by that feature:

  - make iteration actions and then call
     'continue_alternative' if iteration is not ended
     and that current object must be called again to
     switch to an other alternative or else call
     'pop_alternative' if this is the last alternative
     to be explored.
  - select the state to be evaluated or
     call 'continue' or call 'backtrack'.

require

  • is_on_top: Current = explorer.top_alternative

release

Called by ABSTRACT_BACKTRACKING to release current instance to the pool.

require

  • pool /= Void

get_twin: ABSTRACT_BACKTRACKING_ALTERNATIVE

Return a twin of current from the pool

require

  • pool /= Void

ensure

  • Result.is_equal(Current)

deferred pool: ABSTRACT_BACKTRACKING_POOL[ABSTRACT_BACKTRACKING_ALTERNATIVE]

The pool that will record Current

set_pool_link (other: ABSTRACT_BACKTRACKING_POOLABLE)

Set 'pool_link' to 'other'

ensure

  • definition: pool_link = other