Stack.st
author Stefan Vogel <sv@exept.de>
Tue, 20 May 2003 16:59:26 +0200
changeset 1222 19e99db6427d
parent 1094 6759af697a46
child 1245 99e070f7c351
permissions -rw-r--r--
*** empty log message ***

"{ Package: 'stx:libbasic2' }"

OrderedCollection subclass:#Stack
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'Collections-Ordered'
!

!Stack class methodsFor:'documentation'!

documentation
"
    a simple implementation of a Stack.

    [author:]
        Stefan Vogel

    [see also:]
        OrderedCollection Queue
"
!

examples
"
  push-push-....
                                                                [exBegin]
    |aStack|

    aStack := Stack new.
    Transcript showCR:aStack.
    Transcript showCR:'push 1: '.
    aStack push:1.
    Transcript showCR:'push 2: '.
    aStack push:2.
    Transcript showCR:'push 3: '.
    aStack push:3.
    Transcript showCR:aStack.
    Transcript show:'pop: '; showCR:(aStack pop).
    Transcript show:'pop: '; showCR:(aStack pop).
    Transcript show:'pop: '; showCR:(aStack pop).
    Transcript showCR:aStack.
                                                                [exEnd]

  popping too many:
                                                                [exBegin]
    |aStack|

    aStack := Stack new.
    aStack push:1.

    aStack pop.
    aStack pop.
                                                                [exEnd]
"
! !

!Stack class methodsFor:'instance creation'!

new

    ^ self new:100
! !

!Stack methodsFor:'accessing'!

pop
    "Answer the object on top of the stack."

    ^ self removeLast
!

pop: numElem 
    "Pop and discard top numElems and answer receiver"

    self removeLast:numElem
!

push: anObject 
    "Push anObject onto the top of the stack."

    ^ self add:anObject
!

top
    "Answer (without removing) the object on top of the stack."

    ^ self last
! !

!Stack methodsFor:'enumerating'!

do: aBlock
    "Evaluate aBlock for each object on the stack, from top to bottom."

    ^ super reverseDo:aBlock
!

reverseDo: aBlock
    "Evaluate aBlock for each object on the stack, from bottom to top."

    ^ super do:aBlock
! !

!Stack class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libbasic2/Stack.st,v 1.5 2003-05-20 14:59:26 stefan Exp $'
! !