'''
Created on 21 aout 2009

@author: Samuel Benveniste
'''
import time

class EventLog():
    '''
    classdocs
    '''
    
    def __init__(self,eventGroups = [], times = []):
        '''
        Constructor
        '''
        self.eventGroups = eventGroups
        self.times = times
        self.rate = 1
        self.yielder = self.eventGroupYielder()
        self.yieldPointer = 0
        
        self._timeCounter = 0
                
    def __getstate__(self):
        d = []
        d.append(self.eventGroups)
        d.append(self.times)
        return d
    
    def __setstate__(self,d):
        self.eventGroups = d[0]
        self.times = d[1]
        self.yielder = self.eventGroupYielder()
        
        self._timeCounter = 0
    
    def appendEventGroup(self, eventGroup):
        t = time.clock()*1000
        self.times.append(t)
        self.eventGroups.append(eventGroup)
        
    def update(self,timePassed):
        self._timeCounter += timePassed
    
    def setReplayRate(self,rate):
        self.rate = rate
        self.yielder = self.eventGroupYielder()
    
    def getPickledEvents(self):
        return(self.yielder.next())
    
    def getCurrentTime(self):
        return(self.times[self.yieldPointer])
    
    def eventGroupYielder(self):
        '''
        Will return the next event to post if enough time has passed and [] otherwise
        '''
        i = 0
        while i in range(len(self.eventGroups)):
            print "rate is " + str(self.rate)
            if self._timeCounter*self.rate>self.times[i]:
                print str(self._timeCounter*self.rate)+" > "+ str(self.times[i])
                self.yieldPointer = i
                yield self.eventGroups[i]
                i += 1
            else:
                yield []
