local-search-0.0.5: Control/Search/Local/Queue.hs
module Control.Search.Local.Queue where
data Queue a = Queue [a] [a] Int
initQ :: Queue a
initQ = Queue [] [] 0
sizeQ :: Queue a->Int
sizeQ (Queue _ _ s) = s
append :: Queue a -> a -> Queue a
append (Queue fr bk sz) x = Queue fr (x:bk) (1+sz)
remove :: Queue a->Queue a
remove q@(Queue [] [] _ ) = q
remove (Queue [] bk sz) = remove (Queue (reverse bk) [] sz)
remove (Queue as bk sz) = Queue (tail as) bk (sz-1)
toList :: Queue a->[a]
toList (Queue fr bk _) = fr ++ reverse bk