// class definitions are global // if there aren't defintions in a class global countmany=0& class obj { x, s$ property toString$ { value (sp=8) { link parent x, s$ to x, s$ value$=format$("{0::-5}"+string$(" ", sp)+"{1:20}", x, s$) } } remove { countmany-- } class: module obj (.x, .s$) {countmany++} } Module PriorityQueueForGroups { Flush ' empty current stack Data obj(3, "Clear drains"), obj(4 ,"Feed cat"), obj( 5 , "Make tea") Data obj( 1 ,"Solve RC tasks"), obj( 2 , "Tax return") ObjectCount() b=stack while not empty InsertPQ(b) // top of stack is b then objects follow end while ObjectCount() Print "Using Peek to Examine Priority Queue" n1=each(b) Header() while n1 Print @Peek$(n1) end while ObjectCount() Header() while not @isEmpty(b) Print @Pop(b)=>tostring$ end while ObjectCount() // here are the subs/simple functions // these are static parts of module sub Header() Print " Priority Task" Print "========== ================" end sub sub ObjectCount() Print "There are ";countmany;" objects of type obj" end sub sub InsertPQ(a, n) Print "Insert:";n.tostring$(1) if len(a)=0 then stack a {data n} : exit sub if @comp(n, stackitem(a)) then stack a {push n} : exit sub stack a { push n local t=2, b=len(a) local m=b while t<=b t1=m m=(b+t) div 2 if m=0 then m=t1 : exit If @comp(stackitem(m),n) then t=m+1: continue b=m-1 m=b end while if m>1 then shiftback m } end sub function comp(a, b) =a.xtoString$ countmany++ end function function IsEmpty(a) =len(a)=0 end function Function Pop(a) // Group make a copy stack a {=Group:countmany++} end function } PriorityQueueForGroups