7.7.1 Library Style

The module QueueLib.ozf Module/ provides queues in library style. A precompiled version of QueueLib.ozf is available on-line at Functors/Version.3.2/QueueLib.ozf

<QueueLib.oz>=
functor 
export 
   new     : NewQueue
   fromList: ListToQueue  
   Get Put Top Size IsEmpty Clear ToList Enq Deq  
define 
   fun {NewQueue}       L  in {NewCell 0#L#L} end 
   fun {ListToQueue L1} L2 in {NewCell {Length L1}#{Append L1 L2}#L2} end 
    
   proc {Put Q X}
      Old New
   in 
      {Exchange Q Old New}
      case Old
      of N#H#then T2 in T=X|T2 New=N+1#H#T2 end 
   end 
   Enq = Put
    
   fun {Get Q}
      Old New
   in 
      {Exchange Q Old New}
      case Old
      of 0#_#then New=Old raise empty end 
      [] N#(X|H)#then New=N-1#H#T X end 
   end 
   Deq = Get
    
   fun {Top Q}
      case {Access Q}
      of 0#_#then raise empty end 
      [] _#(X|_)#then X end 
   end 
    
   fun  {Size    Q} {Access Q}.end 
   fun  {IsEmpty Q} {Access Q}.1==end 
   proc {Clear   Q} L in {Assign Q 0#L#L} end 
    
   fun {ToList Q}
      case {Access Q} of N#L#then 
         for 
            I in 1..N
            X in L
            collect:C
         do 
            {C X}
         end 
      end 
   end 
end


Denys Duchier, Claire Gardent and Joachim Niehren
Version 1.3.99 (20050412)