import logging # Handle efficient operations on a non-fixed length buffer like appending, # replacing, reading chunks, etc class ChunkBufferMem: def __init__( self, data = '' ): logging.debug( "Creating chunkbuffer: %s" % data ) self.l = len( data ) self.chunk = [ data ] def append( self, s ): self.l += len( s ) self.chunk.append( s ) # Note: replace doesn't effect length so we don't update it def replace( self, buf, start, end ): # We make a string of our chunk, then create a new list of the 3 # strings, the start, new chunk, and remaining chunk s = ''.join( self.chunk ) l = end - start self.chunk = [ s[ :start ], buf[ :l ], s[ end: ] ] def length( self ): return self.l def truncate( self, l ): s = ''.join( self.chunk ) self.l = l self.chunk = [ s[ :l ] ] def _simplify( self ): logging.debug( "Simplify!" ) self.chunk = [ ''.join( self.chunk ) ] def string(self): logging.debug( "Stringifying: %s" % self.chunk ) return ''.join( self.chunk )