class interface AVL_DICTIONARY_NODE[V,K->COMPARABLE]
--
-- Auxiliary class to implement AVL_DICTIONARY[E].
--
creation
make (i: K)
require
i /= Void
ensure
key = i
feature(s) from COMPARABLE
is_equal (other: like Current): BOOLEAN
-- Is other attached to an object considered equal to
-- current object ?
require
other /= Void
ensure
generating_type = other.generating_type implies Result = other.is_equal(Current);
trichotomy: Result = (not (Current < other) and not (other < Current))
infix "<" (other: like Current): BOOLEAN
-- Is Current strictly less than other?
require
other_exists: other /= Void
ensure
asymmetric: Result implies not (other < Current)
infix "<=" (other: like Current): BOOLEAN
-- Is Current less than or equal other?
require
other_exists: other /= Void
ensure
definition: Result = (Current < other or is_equal(other))
infix ">" (other: like Current): BOOLEAN
-- Is Current strictly greater than other?
require
other_exists: other /= Void
ensure
definition: Result = (other < Current)
infix ">=" (other: like Current): BOOLEAN
-- Is Current greater than or equal than other?
require
other_exists: other /= Void
ensure
definition: Result = (other <= Current)
in_range (lower, upper: like Current): BOOLEAN
-- Return True if Current is in range [lower..upper]
ensure
Result = (Current >= lower and Current <= upper)
compare (other: like Current): INTEGER
-- If current object equal to other, 0
-- if smaller, -1; if greater, 1.
require
other_exists: other /= Void
ensure
equal_zero: Result = 0 = is_equal(other);
smaller_negative: Result = -1 = (Current < other);
greater_positive: Result = 1 = (Current > other)
three_way_comparison (other: like Current): INTEGER
-- If current object equal to other, 0
-- if smaller, -1; if greater, 1.
require
other_exists: other /= Void
ensure
equal_zero: Result = 0 = is_equal(other);
smaller_negative: Result = -1 = (Current < other);
greater_positive: Result = 1 = (Current > other)
min (other: like Current): like Current
-- Minimum of Current and other.
require
other /= Void
ensure
Result <= Current and then Result <= other;
compare(Result) = 0 or else other.compare(Result) = 0
max (other: like Current): like Current
-- Maximum of Current and other.
require
other /= Void
ensure
Result >= Current and then Result >= other;
compare(Result) = 0 or else other.compare(Result) = 0
feature(s) from AVL_NODE
out_in_tagged_out_memory
-- Append terse printable represention of current object
-- in tagged_out_memory.
ensure
not_cleared: tagged_out_memory.count >= old tagged_out_memory.count;
append_only: (old tagged_out_memory.twin).is_equal(tagged_out_memory.substring(1,old tagged_out_memory.count))
feature(s) from AVL_NODE
key: K
left: like Current
right: like Current
count: INTEGER
feature(s) from AVL_NODE
last_inserted: like Current
add (i: K): like Current
-- Returns the root node that should replace this one
ensure
last_inserted.key = i;
Result /= Void
remove (i: K): like Current
-- Returns the root node that should replace this one
ensure
lost_nodes.count = old lost_nodes.count + 1;
Result /= Void
clear_nodes
set_key (i: K)
require
i /= Void
ensure
key = i
map_in (map: COLLECTION[like Current])
require
map /= Void
ensure
map.count = old map.count + count
feature(s) from AVL_DICTIONARY_NODE
value: V
set_value (v: V)
ensure
value = v
at (k: K): AVL_DICTIONARY_NODE[V, K]
-- Is element e in the tree?
fast_at (k: K): AVL_DICTIONARY_NODE[V, K]
-- Is element e in the tree?
occurrences (v: V): INTEGER
fast_occurrences (v: V): INTEGER
key_at (v: V): K
fast_key_at (v: V): K
invariant
left /= Void implies left < Current;
right /= Void implies Current < right;
end of AVL_DICTIONARY_NODE[V,K->COMPARABLE]