Native Stack and Queue support

Got an idea for enhancing PureBasic? New command(s) you'd like to see?
User avatar
mback2k
Enthusiast
Enthusiast
Posts: 257
Joined: Sun Dec 02, 2007 12:11 pm
Location: Germany

Native Stack and Queue support

Post by mback2k »

It would be cool if PB could support native Stack and Queue commands. I know, this can be done using LinkedLists(), but I hope that native ASM Stacks and Queues are faster.

Here is my current implementation:

Code: Select all

Macro CreateStack(Name)
  Global NewList Stack#Name
EndMacro

Macro FreeStack(Name)
  ClearList(Stack#Name)
EndMacro

Macro Push(Name, Value)
  AddElement(Stack#Name)
  Stack#Name = Value
EndMacro

Macro Pop(Name)
  Stack#Name
  DeleteElement(Stack#Name)
EndMacro

Macro Top(Name)
  Stack#Name
EndMacro

Macro CreateQueue(Name)
  Global NewList Queue#Name
EndMacro

Macro FreeQueue(Name)
  ClearList(Queue#Name)
EndMacro

Macro Enqueue(Name, Value)
  FirstElement(Queue#Name)
  InsertElement(Queue#Name)
  Queue#Name = Value
  LastElement(Queue#Name)
EndMacro

Macro Dequeue(Name)
  Queue#Name
  DeleteElement(Queue#Name, 1)
EndMacro

#ITERATIONS = 10000000

StartStack = ElapsedMilliseconds()
CreateStack(Bla())
For Index = 1 To #ITERATIONS
  Push(Bla(), 1)
Next
For Index = 1 To #ITERATIONS
  Pop(Bla())
Next
FreeStack(Bla())
EndStack = ElapsedMilliseconds()

StartQueue = ElapsedMilliseconds()
CreateQueue(Bla())
For Index = 1 To #ITERATIONS
  Enqueue(Bla(), 1)
Next
For Index = 1 To #ITERATIONS
  Dequeue(Bla())
Next
FreeQueue(Bla())
EndQueue = ElapsedMilliseconds()

MessageRequester("Result", "Stack"+Chr(9)+Str(EndStack-StartStack)+"ms"+Chr(10)+"Queue"+Chr(9)+Str(EndQueue-StartQueue)+"ms")
Godai
Enthusiast
Enthusiast
Posts: 171
Joined: Thu Oct 05, 2006 8:13 pm

Post by Godai »

Good idea. And include a hashmap too. Much needed ;)
Post Reply