Example #1
0
class EventQueue(object):
    """define the event Q. It can store event and get them by popping from 
    the top"""

    def __init__(self):
        self._eventSortFunc = lambda e : e.eventType == Event.EventType.Now
        self._queue = SkipList(keyFun = Frame.getTime, allowDups = 0)

        
    def enque(self, event):
        """put the given event into the event Q. Throws exception if event has
        negative time"""

        #if e exit in Q in some frame f
        # append e to f
        #else
        # create new frame f with e and add f to Q
        if event.time in self._queue:
            #print "Appending event %s" % event
            self._queue[event.time].append(event)
        else: 
            f = Frame(event.time, self._eventSortFunc)
            f.append(event)
            #print "Adding frame %s" % f
            self._queue.insert(f)
        return
            

    def deque(self):
        """remove the topmost event from the event Q. throws exception if the
        Q is empty"""
        
        if self.isEmpty:
            raise Exception("Error, can't deque cause Q is empty")
        
        currentFrame = self._queue.first()
        resultEvent = currentFrame.pop()
        
        if currentFrame.isEmpty(): #this frame is empty, bring the next one
            self._queue.delete(currentFrame.getTime())

        return resultEvent

    
    @property
    def time(self):
        """returns the time of the top most event in event Q. 
        Returns 0 if Q is empty"""
        if self.isEmpty:
            return 0
        return self._queue.first().peek().time

    
    @property
    def top(self):
        if self.isEmpty:
            raise Exception("Error, can't get top cause event Q is empty")
        return self._queue.first().peek()

    
    @property
    def isEmpty(self):
        return len(self._queue) == 0


    def __len__(self):
        #have to count all events cause sometimes events are merged
        eventCount = 0
        for frame in self._queue:
            eventCount += len(frame)
        return eventCount

    
    def __iter__(self): 
        for frame in self._queue:
            for event in frame:
                yield event

                
    def __str__(self):
        res = "EventQ len: {:3}".format(len(self))
        for i , ev in enumerate(self._queue):
            res += "\n {:3}) {}".format(i, ev)
        return res
Example #2
0
 def __init__(self):
     self._eventSortFunc = lambda e : e.eventType == Event.EventType.Now
     self._queue = SkipList(keyFun = Frame.getTime, allowDups = 0)