Code archives/Miscellaneous/Basic Stack structure

This code has been declared by its author to be Public Domain code.

Download source code

Basic Stack structure by AngelEyes2001
This stack is intended to allows storage of integers, which also means it is capable of storing object handles (via Handle()). Use it how you like, I needed to write it to make tracking particles easier and faster.
Graphics3D 640,480,16,2
SetBuffer BackBuffer()

Type test
	Field c
End Type

Global mystack.stack = Stack_Create(5)

Global camera=CreateCamera()
Global sprite.test=New test
sprite\c = CreateCube()

PositionEntity camera,0,0,-10
PositionEntity sprite\c,0,0,2.5

While Not KeyHit(1)
	Cls
	Stack_Push(mystack,3421)
	Stack_Push(mystack,3431)
	Stack_Push(mystack,3441)
	Stack_Push(mystack,3451)
	
	Stack_Push(mystack,Handle(sprite))
	
	a.test = Object.test(Stack_Pop(mystack))
	TurnEntity a\c,1,2,3
	
	RenderWorld
	Text 10,10,Stack_Pop(mystack)
	Text 10,30,Stack_Pop(mystack)
	Text 10,50,Stack_Pop(mystack)
	Text 10,70,Stack_Pop(mystack)
	Text 10,90,mystack\size
	Flip
Wend

Stack_Destroy(mystack)
FreeEntity sprite\c

End

; The Stack code

Type stack
	Field pointer
	Field size
	Field stack
End Type

Function Stack_Create.stack(size%)  	; size is number of Integer elements, not bytes
	s.stack = New stack
	s\pointer = 0
	s\size = size
	s\stack = CreateBank(size*4)
	Return s
End Function

Function Stack_Push(s.stack, value%) ; pushes an integer onto the stack, returns true for success, false for failed
	If s\pointer < BankSize(s\stack) Then
		PokeInt s\stack,s\pointer,value
		s\pointer = s\pointer + 4
		Return True
	Else
		Return False
	End If
End Function

Function Stack_Pop%(s.stack) ; gets the top integer back, -1
	If s\pointer > 0 Then
		s\pointer = s\pointer - 4
		Return PeekInt(s\stack, s\pointer)	
	Else
		Return -1
	End If
End Function

Function Stack_Destroy(s.stack)
	FreeBank(s\stack)
	Delete s
End Function

Comments

None.

Code Archives Forum