EiffelBase class
(HTML page generated by ISE Eiffel 4.2)
Eiffel Class
indexing
description: "Unbounded queues implemented as linked lists";
status: "See notice at end of class";
names: linked_queue, dispenser, linked_list;
representation: linked;
access: fixed, fifo, membership;
contents: generic;
date: "$Date: 2007-03-30 19:10:11 +0000 (Fri, 30 Mar 2007) $";
revision: "$Revision: 95354 $"
class LINKED_QUEUE [G]
inherit
QUEUE [G]
undefine
empty
redefine
linear_representation, prune_all, extend
select
item, put
end;
LINKED_LIST [G]
rename
item as ll_item,
remove as ll_remove,
make as ll_make,
remove_left as remove,
put as ll_put
export
{NONE} all;
{ANY} writable, extendible, wipe_out, readable
undefine
fill, append, prune, readable, writable, prune_all, extend, force
redefine
duplicate, linear_representation
select
remove
end
creation
make
feature -- Initialization
make is
do
after := true
end;
feature -- Access
item: G is
-- Oldest item
require
notempty
do
check
after and notempty implies (active = last_element)
end;
Result := active.item
end;
feature -- Element change
put (v: G) is
-- Add v as newest item.
-- Was declared in LINKED_QUEUE as synonym of put, extend and force.
do
put_front (v);
before := false;
after := true
ensure
(old empty) implies (item = v)
end;
extend (v: G) is
-- Add v as newest item.
-- Was declared in LINKED_QUEUE as synonym of put, extend and force.
do
put_front (v);
before := false;
after := true
ensure
(old empty) implies (item = v)
end;
force (v: G) is
-- Add v as newest item.
-- Was declared in LINKED_QUEUE as synonym of put, extend and force.
do
put_front (v);
before := false;
after := true
ensure
(old empty) implies (item = v)
end;
feature -- Conversion
linear_representation: ARRAYED_LIST [G] is
-- Representation as a linear structure
-- (order is same as original order of insertion)
local
i: INTEGER
do
create Result.make_filled (count);
from
start;
Result.finish
until
after
loop
Result.replace (item);
forth;
Result.back
end
end;
feature -- Duplication
duplicate (n: INTEGER): like Current is
-- New queue containing the n oldest items in current queue.
-- If n is greater than count, identical to current queue.
require
positive_argument: n > 0
do
start;
from
create Result.make;
start
until
after or Result.count = n
loop
Result.extend (ll_item);
forth
end;
finish
end;
feature {NONE} -- Not applicable
prune (v: like item) is
-- Remove one occurrence of v.
-- Not available.
do
end;
prune_all (v: like item) is
-- Remove all occurrences of v.
-- Not available
do
end;
invariant
is_always_after: notempty implies after;
end -- class LINKED_QUEUE
|