This site contains older material on Eiffel. For the main Eiffel page, see http://www.eiffel.com.

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