aboutsummaryrefslogtreecommitdiffstats
path: root/FuseArchive/ChunkBufferStringIO.py
diff options
context:
space:
mode:
Diffstat (limited to 'FuseArchive/ChunkBufferStringIO.py')
-rw-r--r--FuseArchive/ChunkBufferStringIO.py30
1 files changed, 30 insertions, 0 deletions
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()