Eiffel Introduction
Eiffel 引介
Rensselaer, 2000
James C. McKim, Jr, Rensselaer at Hartford
K ][ N G of @ R K 译
class TEST_STACK
creation make_test
feature{NONE}
si : MY_STACK[ INTEGER ] ; ss : MY_STACK[ STRING ]
make_test is
do
test_integer_stack
test_string_stack
end
test_integer_stack is
do
!!si.make( 3 )
si.push( 3 )
si.push( 2 )
si.push( 1 )
io.putint( si.depth ) io.new_line
io.putint( si.top ) io.new_line
si.pop
io.putint( si.top ) io.new_line
si.pop
io.putint( si.top ) io.new_line
si.pop
end
test_string_stack is
do
!!ss.make( 10 )
ss.push( " in Dixie." )
ss.push( " I was" )
ss.push( "Oh, I wish" )
io.putstring( ss.top )
ss.pop
io.putstring( ss.top )
ss.pop
io.putstring( ss.top ) io.new_line
end
end
class MY_STACK[ G ]
creation make
feature{ANY}
capacity : INTEGER
depth : INTEGER is
do
Result := current_depth
end
push( x : G ) is
-- Make x the top item.
require
not_full: depth < capacity
do
current_depth := current_depth + 1
s.put( x, current_depth )
top := x
ensure
depth = old depth + 1 ; top = x
end -- push
top : G
-- The item that has been on the stack for the least
-- amount of time.
-- require
-- not_empty: depth > 0
pop is
-- Remove the top item.
require
not_empty: depth > 0
do
current_depth := current_depth - 1
if current_depth > 0 then
top := s.item( current_depth )
end
ensure
depth = old depth - 1
-- top = the item remaining on the stack (if any)
-- that has been there the least amount of time.
end -- pop
feature{NONE}
s : ARRAY[ G ]
current_depth : INTEGER
make( c : INTEGER ) is
-- Initialize an empty stack with capacity c.
require
c > 0
do
capacity := c
!!s.make( 1, capacity )
current_depth := 0
ensure
capacity = c
depth = 0
end -- make
end