diff options
Diffstat (limited to 'FuseArchive')
-rw-r--r-- | FuseArchive/ChunkBuffer.py | 3 | ||||
-rw-r--r-- | FuseArchive/ChunkBufferStringIO.py | 30 |
2 files changed, 32 insertions, 1 deletions
diff --git a/FuseArchive/ChunkBuffer.py b/FuseArchive/ChunkBuffer.py index 134ce30..8bf3261 100644 --- a/FuseArchive/ChunkBuffer.py +++ b/FuseArchive/ChunkBuffer.py @@ -1,7 +1,8 @@ from ChunkBufferMem import ChunkBufferMem from ChunkBufferFile import ChunkBufferFile +from ChunkBufferStringIO import ChunkBufferStringIO # Handle efficient operations on a non-fixed length buffer like appending, # replacing, reading chunks, etc -class ChunkBuffer(ChunkBufferMem): +class ChunkBuffer(ChunkBufferStringIO): pass diff --git a/FuseArchive/ChunkBufferStringIO.py b/FuseArchive/ChunkBufferStringIO.py new file mode 100644 index 0000000..9a27f51 --- /dev/null +++ b/FuseArchive/ChunkBufferStringIO.py @@ -0,0 +1,30 @@ +import logging +from cStringIO import StringIO + +# Handle efficient operations on a non-fixed length buffer like appending, +# replacing, reading chunks, etc +class ChunkBufferStringIO: + def __init__( self, data = '' ): + logging.debug( "Creating chunkbuffer: %s" % data ) + self.io = StringIO(); + self.len = 0 + self.append( data ) + + def append( self, s ): + self.len += len( s ) + self.io.write( s ) + + def replace( self, buf, start, end ): + self.io.seek( start ) + self.io.write( buf[ end - start: ] ) + self.io.seek( 0, os.SEEK_END ) + + def length( self ): + return self.len + + def truncate( self, l ): + self.len = l + self.io.truncate( l ) + + def string(self): + return self.io.getvalue() |