indexing
description: "Command manager which is able to retrieve the command associated to a Windows message."
status: "See notice at end of class."
date: "$Date$"
revision: "$Revision$"
class interface
WEL_COMMAND_MANAGER
create
make
feature
accommodate (n: INTEGER)
n
HASH_TABLE
require HASH_TABLE
n >= 0
ensure HASH_TABLE
count_not_changed: count = old count
slot_count_same_as_count: used_slot_count = count
breathing_space: count * 100 < capacity * initial_occupation
make
hash_table_make (n: INTEGER)
n
n
HASH_TABLE
ensure HASH_TABLE
breathing_space: n * 100 < capacity * initial_occupation
minimum_space: minimum_capacity * 100 < capacity * initial_occupation
more_than_minimum: capacity >= minimum_capacity
no_status: not special_status
feature
current_keys: ARRAY [INTEGER]
count
HASH_TABLE
ensure HASH_TABLE
good_count: Result.count = count
cursor: CURSOR
HASH_TABLE
ensure HASH_TABLE
cursor_not_void: Result /= void
found_item: WEL_COMMAND_EXEC
HASH_TABLE
has (key: INTEGER): BOOLEAN
key
HASH_TABLE
ensure then HASH_TABLE
default_case: (key = computed_default_key) implies (Result = has_default)
has_item (v: WEL_COMMAND_EXEC): BOOLEAN
v
object_comparison
HASH_TABLE
ensure CONTAINER
not_found_in_empty: Result implies not is_empty
item (key: INTEGER): WEL_COMMAND_EXEC
key
G
HASH_TABLE@
HASH_TABLE
require TABLE
valid_key: valid_key (k)
ensure then HASH_TABLE
default_value_if_not_present: (not (has (key))) implies (Result = computed_default_value)
item_for_iteration: WEL_COMMAND_EXEC
HASH_TABLE
require HASH_TABLE
not_off: not off
key_for_iteration: INTEGER
HASH_TABLE
require HASH_TABLE
not_off: not off
ensure HASH_TABLE
at_iteration_position: Result = key_at (iteration_position)
infix "@" (key: INTEGER): WEL_COMMAND_EXEC
key
G
HASH_TABLEitem
HASH_TABLE
require TABLE
valid_key: valid_key (k)
ensure then HASH_TABLE
default_value_if_not_present: (not (has (key))) implies (Result = computed_default_value)
feature
capacity: INTEGER
HASH_TABLE
count: INTEGER
HASH_TABLE
occurrences (v: WEL_COMMAND_EXEC): INTEGER
v
HASH_TABLE
ensure BAG
non_negative_occurrences: Result >= 0
feature
is_equal (other: like Current): BOOLEAN
other
HASH_TABLE
require ANY
other_not_void: other /= void
ensure ANY
symmetric: Result implies other.is_equal (Current)
consistent: standard_is_equal (other) implies Result
feature
after: BOOLEAN
HASH_TABLEoff
HASH_TABLE
ensure HASH_TABLE
definition: Result = ((not has_default and (iteration_position >= capacity)) or (has_default and (iteration_position = (capacity + 1))))
changeable_comparison_criterion: BOOLEAN
object_comparison
CONTAINER
conflict: BOOLEAN
HASH_TABLE
exists (message: INTEGER): BOOLEAN
message
require
positive_message: message >= 0
Extendible: BOOLEAN is True
HASH_TABLE
found: BOOLEAN
HASH_TABLE
Full: BOOLEAN is False
HASH_TABLE
inserted: BOOLEAN
HASH_TABLE
is_empty: BOOLEAN
FINITE
is_inserted (v: WEL_COMMAND_EXEC): BOOLEAN
v
COLLECTION
not_found: BOOLEAN
HASH_TABLE
object_comparison: BOOLEAN
equal=
=
CONTAINER
off: BOOLEAN
HASH_TABLEafter
HASH_TABLE
ensure HASH_TABLE
definition: Result = ((not has_default and (iteration_position >= capacity)) or (has_default and (iteration_position = (capacity + 1))))
prunable: BOOLEAN
HASH_TABLE
removed: BOOLEAN
HASH_TABLE
replaced: BOOLEAN
HASH_TABLE
valid_cursor (c: CURSOR): BOOLEAN
c
HASH_TABLE
require HASH_TABLE
c_not_void: c /= void
valid_key (k: INTEGER): BOOLEAN
k
HASH_TABLE
ensure then HASH_TABLE
Result
feature
compare_objects
equal
=
CONTAINER
require CONTAINER
changeable_comparison_criterion
ensure CONTAINER
object_comparison
compare_references
=
equal
CONTAINER
require CONTAINER
changeable_comparison_criterion
ensure CONTAINER
reference_comparison: not object_comparison
feature
forth
off
HASH_TABLE
require HASH_TABLE
not_off: not off
go_to (c: CURSOR)
c
HASH_TABLE
require HASH_TABLE
c_not_void: c /= void
valid_cursor: valid_cursor (c)
search (key: INTEGER)
key
found
found_itemkey
HASH_TABLE
ensure HASH_TABLE
found_or_not_found: found or not_found
item_if_found: found implies (found_item = content.item (position))
start
HASH_TABLE
feature
extend (new: WEL_COMMAND_EXEC; key: INTEGER)
key
newkey
inserted
instructions
HASH_TABLE
require HASH_TABLE
not_present: not has (key)
ensure HASH_TABLE
inserted: inserted
insertion_done: item (key) = new
one_more: count = old count + 1
same_slot_count_or_one_more_unless_reallocated: (used_slot_count = old used_slot_count) or (used_slot_count = old used_slot_count + 1) or (used_slot_count = count)
default_property: has_default = ((key = computed_default_key) or (old has_default))
fill (other: CONTAINER [WEL_COMMAND_EXEC])
other
other
COLLECTION
require COLLECTION
other_not_void: other /= void
extendible
hash_table_force (new: WEL_COMMAND_EXEC; key: INTEGER)
new
key
found
found_item
not_found
found_item
instructions
HASH_TABLE
require else HASH_TABLE
True
ensure then HASH_TABLE
insertion_done: item (key) = new
now_present: has (key)
found_or_not_found: found or not_found
not_found_if_was_not_present: not_found = not (old has (key))
same_count_or_one_more: (count = old count) or (count = old count + 1)
same_slot_count_or_one_more_unless_reallocated: (used_slot_count = old used_slot_count) or (used_slot_count = old used_slot_count + 1) or (used_slot_count = count)
found_item_is_old_item: found implies (found_item = old (item (key)))
default_value_if_not_found: not_found implies (found_item = computed_default_value)
default_property: has_default = ((key = computed_default_key) or ((key /= computed_default_key) and (old has_default)))
put (new: WEL_COMMAND_EXEC; key: INTEGER)
newkey
inserted
key
position
conflict
found_item
key
new
instructions
HASH_TABLE
require TABLE
valid_key: valid_key (k)
ensure then HASH_TABLE
conflict_or_inserted: conflict or inserted
insertion_done: inserted implies item (key) = new
now_present: inserted implies has (key)
one_more_if_inserted: inserted implies (count = old count + 1)
one_more_slot_if_inserted_unless_reallocated: inserted implies ((used_slot_count = old used_slot_count + 1) or (used_slot_count = count))
unchanged_if_conflict: conflict implies (count = old count)
same_item_if_conflict: conflict implies (item (key) = old (item (key)))
slot_count_unchanged_if_conflict: conflict implies (used_slot_count = old used_slot_count)
found_item_associated_with_key: found_item = item (key)
new_item_if_inserted: inserted implies (found_item = new)
old_item_if_conflict: conflict implies (found_item = old (item (key)))
default_property: has_default = ((inserted and (key = computed_default_key)) or ((conflict or (key /= computed_default_key)) and (old has_default)))
replace (new: WEL_COMMAND_EXEC; key: INTEGER)
key
new
replaced
keynot_found
found_item
key
instructions
HASH_TABLE
ensure HASH_TABLE
replaced_or_not_found: replaced or not_found
insertion_done: replaced implies item (key) = new
no_change_if_not_found: not_found implies item (key) = old (item (key))
found_item_is_old_item: found_item = old (item (key))
replace_key (new_key: INTEGER; old_key: INTEGER)
old_key
new_keynew_key
replacedfound_item
old_key
not_foundconflict
conflictfound_item
new_key
instructions
HASH_TABLE
ensure HASH_TABLE
same_count: count = old count
same_slot_count: used_slot_count = old used_slot_count
replaced_or_conflict_or_not_found: replaced or conflict or not_found
old_absent: (replaced and not equal (new_key, old_key)) implies (not has (old_key))
new_present: (replaced or conflict) = has (new_key)
new_item: replaced implies (item (new_key) = old (item (old_key)))
not_found_iff_no_old_key: not_found = old (not has (old_key))
conflict_iff_already_present: conflict = old (has (new_key))
not_inserted_if_conflict: conflict implies (item (new_key) = old (item (new_key)))
default_property: has_default = ((new_key = computed_default_key) or ((new_key /= computed_default_key) and (old has_default)))
feature
clear_all
HASH_TABLE
require COLLECTION
prunable
ensure COLLECTION
wiped_out: is_empty
ensure then HASH_TABLE
position_equal_to_zero: position = 0
count_equal_to_zero: count = 0
used_slot_count_equal_to_zero: used_slot_count = 0
has_default_set: not has_default
no_status: not special_status
hash_table_remove (key: INTEGER)
key
removed
key
position
not_found
HASH_TABLE
ensure HASH_TABLE
removed_or_not_found: removed or not_found
not_present: not has (key)
one_less: found implies (count = old count - 1)
same_slot_count: used_slot_count = old used_slot_count
default_case: (key = computed_default_key) implies (not has_default)
non_default_case: (key /= computed_default_key) implies (has_default = old has_default)
feature
linear_representation: ARRAYED_LIST [WEL_COMMAND_EXEC]
HASH_TABLE
ensure then HASH_TABLE
result_exists: Result /= void
good_count: Result.count = count
feature
copy (other: like Current)
other
HASH_TABLE
require ANY
other_not_void: other /= void
type_identity: same_type (other)
ensure ANY
is_equal: is_equal (other)
feature
force (command: WEL_COMMAND_EXEC; message: INTEGER)
commandmessage
require
command_not_void: command /= void
positive_message: message >= 0
ensure
exists: exists (message)
remove (message: INTEGER)
message
require
positive_message: message >= 0
ensure
not_exists: not exists (message)
invariant
ANY
reflexive_equality: standard_is_equal (Current)
reflexive_conformance: conforms_to (Current)
HASH_TABLE
keys_not_void: keys /= void
content_not_void: content /= void
keys_same_capacity_plus_one: keys.count = capacity + 1
content_same_capacity_plus_one: content.count = capacity + 1
deleted_same_capacity: deleted_marks.count = capacity
keys_starts_at_zero: keys.lower = 0
content_starts_at_zero: content.lower = 0
deleted_starts_at_zero: deleted_marks.lower = 0
valid_iteration_position: off or truly_occupied (iteration_position)
control_non_negative: control >= 0
special_status: special_status = (conflict or inserted or replaced or removed or found or not_found)
max_occupation_meaningful: (max_occupation > 0) and (max_occupation < 100)
initial_occupation_meaningful: (initial_occupation > 0) and (initial_occupation < 100)
sized_generously_enough: initial_occupation < max_occupation
count_big_enough: 0 <= count
count_small_enough: count <= capacity
breathing_space: count * 100 <= capacity * max_occupation
count_no_more_than_slot_count: count <= used_slot_count
slot_count_big_enough: 0 <= count
slot_count_small_enough: used_slot_count <= capacity
extra_space_non_negative: extra_space >= 0
FINITE
empty_definition: is_empty = (count = 0)
non_negative_count: count >= 0
end -- WEL_COMMAND_MANAGER