note
	description: "[
		General container data structures, 
		characterized by the membership properties of their items.
	]"
	library: "Free implementation of ELKS library"
	legal: "See notice at end of class."
	status: "See notice at end of class."
	names: collection, access
	access: membership
	contents: generic
	date: "$Date: 2012-07-23 21:02:19 +0000 (Mon, 23 Jul 2012) $"
	revision: "$Revision: 91989 $"

deferred class 
	COLLECTION [G]

inherit
	CONTAINER [G]

feature -- Status report

	extendible: BOOLEAN
			-- May new items be added?
		deferred
		end

	prunable: BOOLEAN
			-- May items be removed?
		deferred
		end

	is_inserted (v: G): BOOLEAN
			-- Has v been inserted by the most recent insertion?
			-- (By default, the value returned is equivalent to calling 
			-- has (v). However, descendants might be able to provide more
			-- efficient implementations.)
		do
			Result := has (v)
		end
	
feature -- Element change

	put (v: G)
			-- Ensure that structure includes v.
			-- Was declared in COLLECTION as synonym of extend.
		require
			extendible: extendible
		deferred
		ensure
			item_inserted: is_inserted (v)
		end

	extend (v: G)
			-- Ensure that structure includes v.
			-- Was declared in COLLECTION as synonym of put.
		require
			extendible: extendible
		deferred
		ensure
			item_inserted: is_inserted (v)
		end

	fill (other: CONTAINER [G])
			-- Fill with as many items of other as possible.
			-- The representations of other and current structure
			-- need not be the same.
		require
			other_not_void: other /= Void
			extendible: extendible
		local
			lin_rep: LINEAR [G]
		do
			lin_rep := other.linear_representation
			from
				lin_rep.start
			until
				not extendible or else lin_rep.off
			loop
				extend (lin_rep.item)
				lin_rep.forth
			end
		end
	
feature -- Removal

	prune (v: G)
			-- Remove one occurrence of v if any.
			-- (Reference or object equality,
			-- based on object_comparison.)
		require
			prunable: prunable
		deferred
		end

	prune_all (v: G)
			-- Remove all occurrences of v.
			-- (Reference or object equality,
			-- based on object_comparison.)
		require
			prunable: prunable
		do
			from
			until
				not has (v)
			loop
				prune (v)
			end
		ensure
			no_more_occurrences: not has (v)
		end

	wipe_out
			-- Remove all items.
		require
			prunable: prunable
		deferred
		ensure
			wiped_out: is_empty
		end
	
note
	copyright: "Copyright (c) 1984-2012, Eiffel Software and others"
	license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
	source: "[
		Eiffel Software
		5949 Hollister Ave., Goleta, CA 93117 USA
		Telephone 805-685-1006, Fax 805-685-6869
		Website http://www.eiffel.com
		Customer support http://support.eiffel.com
	]"

end -- class COLLECTION

Generated by ISE EiffelStudio