indexing
description: "A sequence of actions to be performed on call"
legal: "See notice at end of class."
instructions: "[
Use features inherited from LIST to add/remove actions.
An action is a procedure of ANY class that takes EVENT_DATA.
When call is called the actions in the list will be executed
in order stating at first.
An action may call abort which will cause call to stop executing
actions in the sequence. (Until the next call to call).
Descendants may redefine `initialize' to arrange for call to
be called by an event source.
Use block, pause, flush and resume to change the behavior
of call.
eg.
birthday_data: TUPLE [INTEGER, STRING] -- (age, name)
birthday_actions: ACTIONS_SEQUENCE [like birthday_data]
create birthday_actions.make ("birthday", <<"age","name">>)
send_card (age: INTEGER, name, from: STRING) is ...
buy_gift (age: INTEGER, name, gift, from: STRING) is ...
birthday_actions.extend (agent send_card (?, ?, "Sam")
birthday_actions.extend (agent buy_gift (?, ?, "Wine", "Sam")
birthday_actions.call ([35, "Julia"])
causes call to: send_card (35, "Julia", "Sam")
buy_gift (35, "Julia", "Wine", "Sam")
]"
status: "See notice at end of class."
keywords: "event, action"
date: "$Date: 2008-05-05 05:26:45 -0700 (Mon, 05 May 2008) $"
revision: "$Revision: 73316 $"
class interface
ACTION_SEQUENCE [EVENT_DATA -> TUPLE create default_create end]
create
default_create
Normal_state
make
create {ACTION_SEQUENCE}
array_make (min_index, max_index: INTEGER_32)
`min_index'`max_index'
`min_index'`max_index'
ARRAY
require ARRAY
valid_bounds: min_index <= max_index + 1
ensure ARRAY
lower_set: lower = min_index
upper_set: upper = max_index
items_set: all_default
arrayed_list_make (n: INTEGER_32)
`n'
`n'
ARRAYED_LIST
require ARRAYED_LIST
valid_number_of_items: n >= 0
ensure ARRAYED_LIST
correct_position: before
is_empty: is_empty
make_filled (n: INTEGER_32)
`n'
`n'
ARRAYED_LIST
require ARRAYED_LIST
valid_number_of_items: n >= 0
ensure ARRAYED_LIST
correct_position: before
filled: full
feature
arrayed_list_make (n: INTEGER_32)
`n'
`n'
ARRAYED_LIST
require ARRAYED_LIST
valid_number_of_items: n >= 0
ensure ARRAYED_LIST
correct_position: before
is_empty: is_empty
make_filled (n: INTEGER_32)
`n'
`n'
ARRAYED_LIST
require ARRAYED_LIST
valid_number_of_items: n >= 0
ensure ARRAYED_LIST
correct_position: before
filled: full
make_from_array (a: ARRAY [PROCEDURE [ANY, EVENT_DATA]])
`a'
ARRAYED_LIST
require ARRAY
array_exists: a /= Void
ensure then ARRAYED_LIST
correct_position: before
filled: count = a.count
feature
cursor: ARRAYED_LIST_CURSOR
ARRAYED_LIST
ensure CURSOR_STRUCTURE
cursor_not_void: Result /= Void
first: like item
ARRAYED_LIST
require CHAIN
not_empty: not is_empty
generating_type: STRING_8
ANY
ensure ANY
generating_type_not_void: Result /= Void
generating_type_not_empty: not Result.is_empty
generator: STRING_8
ANY
ensure ANY
generator_not_void: Result /= Void
generator_not_empty: not Result.is_empty
has (v: like item): BOOLEAN
`v'
object_comparison
ARRAYED_LIST
require CONTAINER
True
ensure CONTAINER
not_found_in_empty: Result implies not is_empty
i_th alias "[]" (i: INTEGER_32): like item assign put_i_th
`i'
ARRAYED_LISTinfix "@"
ARRAYED_LIST
require TABLE
valid_key: valid_index (i)
index: INTEGER_32
item
ARRAYED_LIST
index_of (v: like item; i: INTEGER_32): INTEGER_32
`i'`v'
object_comparison
CHAIN
require LINEAR
positive_occurrences: i > 0
ensure LINEAR
non_negative_result: Result >= 0
item: PROCEDURE [ANY, EVENT_DATA]
ARRAYED_LIST
require TRAVERSABLE
not_off: not off
require ACTIVE
readable: readable
require else ARRAYED_LIST
index_is_valid: valid_index (index)
item_for_iteration: PROCEDURE [ANY, EVENT_DATA]
LINEAR
require LINEAR
not_off: not off
last: like first
ARRAYED_LIST
require CHAIN
not_empty: not is_empty
name: ?STRING_8
ensure
equal_to_name_internal: equal (Result, name_internal)
sequential_occurrences (v: like item): INTEGER_32
`v'
object_comparison
LINEAR
require BAG
True
ensure BAG
non_negative_occurrences: Result >= 0
infix "@" (i: INTEGER_32): like item assign put_i_th
`i'
ARRAYED_LISTi_th
ARRAYED_LIST
require TABLE
valid_key: valid_index (i)
feature
capacity: INTEGER_32
ARRAYcount
ARRAY
require BOUNDED
True
ensure then ARRAY
consistent_with_bounds: Result = upper - lower + 1
count: INTEGER_32
ARRAYED_LIST
index_set: INTEGER_INTERVAL
CHAIN
require INDEXABLE
True
ensure INDEXABLE
not_void: Result /= Void
ensure then CHAIN
count_definition: Result.count = count
occurrences (v: like item): INTEGER_32
`v'
object_comparison
CHAIN
require BAG
True
require LINEAR
True
ensure BAG
non_negative_occurrences: Result >= 0
feature
frozen deep_equal (some: ?ANY; other: like arg #1): BOOLEAN
`some'`other'
ANY
ensure ANY
shallow_implies_deep: standard_equal (some, other) implies Result
both_or_none_void: (some = Void) implies (Result = (other = Void))
same_type: (Result and (some /= Void)) implies (other /= Void and then some.same_type (other))
symmetric: Result implies deep_equal (other, some)
frozen equal (some: ?ANY; other: like arg #1): BOOLEAN
`some'`other'
ANY
ensure ANY
definition: Result = (some = Void and other = Void) or else ((some /= Void and other /= Void) and then some.is_equal (other))
frozen is_deep_equal (other: ACTION_SEQUENCE [EVENT_DATA]): BOOLEAN
`Current'`other'
ANY
require ANY
other_not_void: other /= Void
ensure ANY
shallow_implies_deep: standard_is_equal (other) implies Result
same_type: Result implies same_type (other)
symmetric: Result implies other.is_deep_equal (Current)
is_equal (other: ACTION_SEQUENCE [EVENT_DATA]): BOOLEAN
`other'
LIST
require ANY
other_not_void: other /= Void
ensure ANY
symmetric: Result implies other.is_equal (Current)
consistent: standard_is_equal (other) implies Result
ensure then LIST
indices_unchanged: index = old index and other.index = old other.index
true_implies_same_size: Result implies count = other.count
frozen standard_equal (some: ?ANY; other: like arg #1): BOOLEAN
`some'`other'
ANY
ensure ANY
definition: Result = (some = Void and other = Void) or else ((some /= Void and other /= Void) and then some.standard_is_equal (other))
frozen standard_is_equal (other: ACTION_SEQUENCE [EVENT_DATA]): BOOLEAN
`other'
ANY
require ANY
other_not_void: other /= Void
ensure ANY
same_type: Result implies same_type (other)
symmetric: Result implies other.standard_is_equal (Current)
feature
after: BOOLEAN
LIST
require LINEAR
True
before: BOOLEAN
LIST
require BILINEAR
True
blocked_state: INTEGER_32 is 3
call_is_underway: BOOLEAN
call
ensure
Result = not is_aborted_stack.is_empty
changeable_comparison_criterion: BOOLEAN
object_comparison
CONTAINER
conforms_to (other: ANY): BOOLEAN
`other'
ANY
require ANY
other_not_void: other /= Void
exhausted: BOOLEAN
LINEAR
ensure LINEAR
exhausted_when_off: off implies Result
extendible: BOOLEAN is True
DYNAMIC_CHAIN
full: BOOLEAN
ARRAYED_LIST
require BOX
True
is_empty: BOOLEAN
FINITE
require CONTAINER
True
is_inserted (v: PROCEDURE [ANY, EVENT_DATA]): BOOLEAN
`v'put
extend
ARRAYED_LIST
isfirst: BOOLEAN
CHAIN
ensure CHAIN
valid_position: Result implies not is_empty
islast: BOOLEAN
CHAIN
ensure CHAIN
valid_position: Result implies not is_empty
normal_state: INTEGER_32 is 1
object_comparison: BOOLEAN
equal`='
`='
CONTAINER
off: BOOLEAN
CHAIN
require TRAVERSABLE
True
paused_state: INTEGER_32 is 2
prunable: BOOLEAN
ARRAYED_LIST
require COLLECTION
True
readable: BOOLEAN
SEQUENCE
require ACTIVE
True
same_type (other: ANY): BOOLEAN
`other'
ANY
require ANY
other_not_void: other /= Void
ensure ANY
definition: Result = (conforms_to (other) and other.conforms_to (Current))
state: INTEGER_32
Normal_statePaused_stateBlocked_state
valid_cursor (p: CURSOR): BOOLEAN
`p'
ARRAYED_LIST
valid_cursor_index (i: INTEGER_32): BOOLEAN
`i'
CHAIN
ensure CHAIN
valid_cursor_index_definition: Result = ((i >= 0) and (i <= count + 1))
valid_index (i: INTEGER_32): BOOLEAN
`i'
ARRAYED_LIST
require TABLE
True
require TO_SPECIAL
True
ensure then INDEXABLE
only_if_in_index_set: Result implies ((i >= index_set.lower) and (i <= index_set.upper))
ensure then CHAIN
valid_index_definition: Result = ((i >= 1) and (i <= count))
writable: BOOLEAN
SEQUENCE
require ACTIVE
True
feature
abort
call
require
call_is_underway: call_is_underway
ensure
is_aborted_set: is_aborted_stack.item
block
call
ensure
blocked_state: state = blocked_state
compare_objects
equal
`='
CONTAINER
require CONTAINER
changeable_comparison_criterion: changeable_comparison_criterion
ensure CONTAINER
object_comparison
compare_references
`='
equal
CONTAINER
require CONTAINER
changeable_comparison_criterion: changeable_comparison_criterion
ensure CONTAINER
reference_comparison: not object_comparison
flush
call
ensure
call_buffer_empty: call_buffer.is_empty
pause
call
`is_blocked'
ensure
paused_state: state = paused_state
resume
blockpausecall
call
ensure
normal_state: state = normal_state
feature
back
ARRAYED_LIST
require BILINEAR
not_before: not before
finish
ARRAYED_LIST
require LINEAR
True
ensure then CHAIN
at_last: not is_empty implies islast
ensure then ARRAYED_LIST
before_when_empty: is_empty implies before
forth
ARRAYED_LIST
require LINEAR
not_after: not after
ensure then LIST
moved_forth: index = old index + 1
go_i_th (i: INTEGER_32)
`i'
ARRAYED_LIST
require CHAIN
valid_cursor_index: valid_cursor_index (i)
ensure CHAIN
position_expected: index = i
go_to (p: CURSOR)
`p'
ARRAYED_LIST
require CURSOR_STRUCTURE
cursor_position_valid: valid_cursor (p)
move (i: INTEGER_32)
`i'
ARRAYED_LIST
ensure CHAIN
too_far_right: (old index + i > count) implies exhausted
too_far_left: (old index + i < 1) implies exhausted
expected_index: (not exhausted) implies (index = old index + i)
search (v: like item)
item`v'
`v'
exhausted
object_comparison
ARRAYED_LIST
require LINEAR
True
ensure LINEAR
object_found: (not exhausted and object_comparison) implies equal (v, item)
item_found: (not exhausted and not object_comparison) implies v = item
start
ARRAYED_LIST
require TRAVERSABLE
True
ensure then CHAIN
at_first: not is_empty implies isfirst
ensure then ARRAYED_LIST
after_when_empty: is_empty implies after
feature
append (s: SEQUENCE [PROCEDURE [ANY, EVENT_DATA]])
`s'
ARRAYED_LIST
require SEQUENCE
argument_not_void: s /= Void
ensure SEQUENCE
new_count: count >= old count
extend (v: like item)
`v'
ARRAYED_LISTforce
ARRAYED_LIST
require COLLECTION
extendible: extendible
ensure COLLECTION
item_inserted: is_inserted (v)
ensure then BAG
one_more_occurrence: occurrences (v) = old (occurrences (v)) + 1
fill (other: CONTAINER [PROCEDURE [ANY, EVENT_DATA]])
`other'
`other'
CHAIN
require COLLECTION
other_not_void: other /= Void
extendible: extendible
force (v: like item)
`v'
ARRAYED_LISTextend
ARRAYED_LIST
require SEQUENCE
extendible: extendible
ensure then SEQUENCE
new_count: count = old count + 1
item_inserted: has (v)
merge_left (other: ARRAYED_LIST [PROCEDURE [ANY, EVENT_DATA]])
`other'
ARRAYED_LIST
require DYNAMIC_CHAIN
extendible: extendible
not_before: not before
other_exists: other /= Void
not_current: other /= Current
ensure DYNAMIC_CHAIN
new_count: count = old count + old other.count
new_index: index = old index + old other.count
other_is_empty: other.is_empty
merge_right (other: ARRAYED_LIST [PROCEDURE [ANY, EVENT_DATA]])
`other'
ARRAYED_LIST
require DYNAMIC_CHAIN
extendible: extendible
not_after: not after
other_exists: other /= Void
not_current: other /= Current
ensure DYNAMIC_CHAIN
new_count: count = old count + old other.count
same_index: index = old index
other_is_empty: other.is_empty
put_i_th (v: like i_th; i: INTEGER_32)
`i'`v'
ARRAY
require TABLE
valid_key: valid_index (i)
require TO_SPECIAL
valid_index: valid_index (i)
ensure then INDEXABLE
insertion_done: i_th (i) = v
ensure TO_SPECIAL
inserted: array_item (i) = v
put (v: like item)
`v'
replace
CHAIN
require COLLECTION
extendible: extendible
ensure COLLECTION
item_inserted: is_inserted (v)
ensure then CHAIN
same_count: count = old count
put_front (v