From 3c4a553a245d736622a5ae584e6ddbb0e73b15ff Mon Sep 17 00:00:00 2001
From: Steve Slaven <bpk@hoopajoo.net>
Date: Mon, 2 Nov 2009 17:03:36 -0800
Subject: Use a cStringBuffer for IO which appears to be faster than using
 join() for very large lists


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()
-- 
cgit v0.10.2