#!/usr/bin/env python # Jacob Joseph # 11 Aug 2008 # A heap-based priority queue implementation from heapq import * class pqueue( object): def __init__(self, l=None): if l is None: self.__heap = [] else: self.__heap = l heapify( self.__heap) self.__delset = set() def __repr__(self): return (self.__heap, self.__delset).__repr__() def __str__(self): return self.__repr__() def push(self, obj): """Add an object to the queue""" heappush( self.__heap, obj) def pop(self): """Pop the minimum from the queue""" m = heappop( self.__heap) while m in self.__delset: m = heappop( self.__heap) return m def fetch_min(self): """Nondestructively fetch the min from the queue""" if len(self.__heap) == 0: return None m = self.__heap[0] while m in self.__delset: heappop( self.__heap) m = self.__heap[0] return m def delete(self, obj): """Delete an object, lazily""" # lazy delete self.__delset.add( obj)