Jump to content
inmysights

Queue, or Priority queue

Recommended Posts

inmysights,

guinness has coded this Queue UDF - any use?

M23


Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Here is an example of a circular FIFO queue.

#Region Example
Global $g_aQueue = QueueCreate(5)

Global $g_nDataPush = 1
Global $g_nDataPeek = 0
Global $g_nDataPop  = 0

For $i = 1 To 2
    While QueuePush($g_aQueue, $g_nDataPush)
        ConsoleWrite(StringFormat("-->> QueuePush: %i\n", $g_nDataPush))
        $g_nDataPush += 1
    WEnd

    QueuePeek($g_aQueue, $g_nDataPeek)
    ConsoleWrite(StringFormat("+->> QueuePeek: %i\n", $g_nDataPeek))

    While QueuePop($g_aQueue, $g_nDataPop)
        ConsoleWrite(StringFormat(">--> QueuePop:  %i\n", $g_nDataPop))
    WEnd
Next
#EndRegion Example

Func QueuePush(ByRef $aQueue, $vData)
    If ($aQueue[0] = $aQueue[1]) Then Return False

    $aQueue[3] = Mod($aQueue[3] + 1, $aQueue[0])
    $g_aQueue[$aQueue[3] + 4] = $vData
    $aQueue[1] += 1

    Return True
EndFunc

Func QueuePop(ByRef $aQueue, ByRef $vData)
    If ($aQueue[1] = 0) Then Return False

    $aQueue[2] = Mod($aQueue[2] + 1, $aQueue[0])
    $vData = $g_aQueue[$aQueue[2] + 4]
    $aQueue[1] -= 1

    Return True
EndFunc

Func QueuePeek(ByRef $aQueue, ByRef $vData)
    If ($aQueue[1] = 0) Then Return False

    Local $nTemp = Mod($aQueue[2] + 1, $aQueue[0])
    $vData = $g_aQueue[$nTemp + 4]

    Return True
EndFunc

Func QueueCreate($nSize)
    Local $aQueue[$nSize + 4] = [$nSize, 0, 0, 0]
    Return $aQueue
EndFunc

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...