Show
Ignore:
Timestamp:
05/19/04 21:09:36 (20 years ago)
Author:
jalet
Message:

Speed improvement

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/pykota/pdlanalyzer.py

    r1482 r1485  
    2222# 
    2323# $Log$ 
     24# Revision 1.2  2004/05/19 19:09:36  jalet 
     25# Speed improvement 
     26# 
    2427# Revision 1.1  2004/05/18 09:59:54  jalet 
    2528# pkpgcounter is now just a wrapper around the PDLAnalyzer class 
     
    5457        """Initialize PCL Analyzer.""" 
    5558        self.infile = infile 
     59         
     60    def skip(self, nb) :     
     61        """Reads a new datablock.""" 
     62        newpos = self.pos + nb 
     63        if newpos >= self.len : 
     64            oldlen = self.len 
     65            self.data = self.infile.read(1024*1024) 
     66            self.len = len(self.data) 
     67            if not self.len : 
     68                return 
     69            self.pos = newpos - oldlen 
     70        else :     
     71            self.pos = newpos 
     72         
     73    def readone(self) : 
     74        """Reads a new byte.""" 
     75        if self.pos < self.len : 
     76            char = self.data[self.pos] 
     77        else :     
     78            self.data = self.infile.read(1024*1024) 
     79            self.len = len(self.data) 
     80            self.pos = 0 
     81            if not self.len :     
     82                return 
     83            char = self.data[0] 
     84        self.pos += 1     
     85        return char 
    5686         
    5787    def getJobSize(self) :      
     
    84114                     "&p" : "X",  
    85115                     "&l" : "X" }  
     116        self.data = []              
     117        self.pos = self.len = 0 
    86118        copies = 1 
    87119        pagecount = resets = 0 
    88120        tag = None 
    89121        while 1 : 
    90             char = self.infile.read(1) 
     122            char = self.readone() 
    91123            if not char :       # EOF ? 
    92124                break    
     
    110142                #     <ESC>&p###X -> Start of a non printable characters block 
    111143                # 
    112                 tagstart = self.infile.read(1) 
     144                tagstart = self.readone() 
    113145                if tagstart in "E9=YZ" : # one byte PCL tag 
    114146                    if tagstart == "E" : 
    115147                        resets += 1 
    116148                    continue             # skip to next tag 
    117                 tag = tagstart + self.infile.read(1) 
     149                tag = tagstart + self.readone() 
    118150                try : 
    119151                    tagend = tagsends[tag] 
     
    124156                    size = 0 
    125157                    while 1 : 
    126                         char = self.infile.read(1) 
     158                        char = self.readone() 
    127159                        if not char.isdigit() : 
    128160                            break 
     
    139171                                # which is before the string itself 
    140172                                size += 1 
    141                             self.infile.read(size) # skips block, while avoiding seek() 
     173                            self.skip(size) 
    142174                             
    143175        # if pagecount is still 0, we will return the number