note description: "Finite structures whose item count is subject to change" library: "Free implementation of ELKS library" legal: "See notice at end of class." status: "See notice at end of class." names: storage size: resizable date: "$Date: 2012-07-23 21:02:19 +0000 (Mon, 23 Jul 2012) $" revision: "$Revision: 91989 $" deferred class RESIZABLE [G] inherit BOUNDED [G] feature -- Measurement Growth_percentage: INTEGER_32 = 50 -- Percentage by which structure will grow automatically Minimal_increase: INTEGER_32 = 5 -- Minimal number of additional items additional_space: INTEGER_32 -- Proposed number of additional items do Result := (capacity // 2).max (Minimal_increase) ensure at_least_one: Result >= 1 end feature -- Status report resizable: BOOLEAN -- May capacity be changed? (Answer: yes.) do Result := True end feature -- Resizing automatic_grow -- Change the capacity to accommodate at least -- Growth_percentage more items. require resizable: resizable do grow (capacity + additional_space) ensure increased_capacity: capacity >= old capacity + old additional_space end grow (i: INTEGER_32) -- Ensure that capacity is at least i. require resizable: resizable deferred ensure new_capacity: capacity >= i end trim -- Decrease capacity to the minimum value. -- Apply to reduce allocated storage. deferred ensure same_count: count = old count minimal_capacity: capacity = count end invariant increase_by_at_least_one: Minimal_increase >= 1 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 RESIZABLE
Generated by ISE EiffelStudio