77 lines
1.5 KiB
Plaintext
77 lines
1.5 KiB
Plaintext
|
note
|
||
|
description: "[
|
||
|
A set, implemented as an array, whose items *can* be ordered based on
|
||
|
a total-order relationship.
|
||
|
Feature `set_ordered' causes `extend' to place an item into the array
|
||
|
at its proper sort-order position.
|
||
|
Feature `prune' is redefined in {JJ_ARRAYED_LIST} to remove the first
|
||
|
occurrence of an item at or after the beginning of the list, not after
|
||
|
the current position, as in {ARRAYED_LIST}.
|
||
|
]"
|
||
|
author: "Jimmy J. Johnson"
|
||
|
date: "10/27/21"
|
||
|
copyright: "Copyright (c) 2021, Jimmy J. Johnson"
|
||
|
license: "Eiffel Forum v2 (http://www.eiffel.com/licensing/forum.txt)"
|
||
|
|
||
|
class
|
||
|
JJ_SORTABLE_SET [G -> COMPARABLE]
|
||
|
|
||
|
inherit
|
||
|
|
||
|
JJ_ARRAYED_SET [G]
|
||
|
export
|
||
|
{ANY}
|
||
|
for_all,
|
||
|
there_exists,
|
||
|
capacity,
|
||
|
i_th
|
||
|
undefine
|
||
|
put,
|
||
|
sequence_put,
|
||
|
prune,
|
||
|
array_item,
|
||
|
is_inserted,
|
||
|
has
|
||
|
redefine
|
||
|
extend
|
||
|
select
|
||
|
put,
|
||
|
extend
|
||
|
end
|
||
|
|
||
|
JJ_SORTABLE_ARRAY [G]
|
||
|
rename
|
||
|
has as has alias "∋",
|
||
|
extend as jj_sl_extend
|
||
|
export {ANY}
|
||
|
i_th
|
||
|
undefine
|
||
|
changeable_comparison_criterion,
|
||
|
replace
|
||
|
end
|
||
|
|
||
|
create
|
||
|
make, make_filled
|
||
|
|
||
|
feature -- Basic operations
|
||
|
|
||
|
extend (a_item: like item)
|
||
|
-- Put `a_item' into Current at `seek_position' if
|
||
|
-- not alread in the array.
|
||
|
local
|
||
|
i: INTEGER
|
||
|
do
|
||
|
if not has (a_item) then
|
||
|
i := seek_position (a_item).position
|
||
|
if i > count then
|
||
|
-- add `a_item' at the end
|
||
|
force (a_item)
|
||
|
else
|
||
|
-- add `a_item' at its ordered position
|
||
|
insert (a_item, i)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|