Author: Justin Peel <[email protected]>
Branch:
Changeset: r45858:a02ff8434e20
Date: 2011-07-22 00:48 -0600
http://bitbucket.org/pypy/pypy/changeset/a02ff8434e20/
Log: merged streamio-bufout
diff --git a/pypy/rlib/streamio.py b/pypy/rlib/streamio.py
--- a/pypy/rlib/streamio.py
+++ b/pypy/rlib/streamio.py
@@ -875,28 +875,32 @@
if bufsize == -1: # Get default from the class
bufsize = self.bufsize
self.bufsize = bufsize # buffer size (hint only)
- self.buf = ""
+ self.buf = []
+ self.buflen = 0
def flush_buffers(self):
if self.buf:
- self.do_write(self.buf)
- self.buf = ""
+ self.do_write(''.join(self.buf))
+ self.buf = []
+ self.buflen = 0
def tell(self):
- return self.do_tell() + len(self.buf)
+ return self.do_tell() + self.buflen
def write(self, data):
- buflen = len(self.buf)
+ buflen = self.buflen
datalen = len(data)
if datalen + buflen < self.bufsize:
- self.buf += data
+ self.buf.append(data)
+ self.buflen += datalen
elif buflen:
- slice = self.bufsize - buflen
- assert slice >= 0
- self.buf += data[:slice]
- self.do_write(self.buf)
- self.buf = ""
- self.write(data[slice:])
+ i = self.bufsize - buflen
+ assert i >= 0
+ self.buf.append(data[:i])
+ self.do_write(''.join(self.buf))
+ self.buf = []
+ self.buflen = 0
+ self.write(data[i:])
else:
self.do_write(data)
@@ -922,11 +926,27 @@
"""
def write(self, data):
- BufferingOutputStream.write(self, data)
- p = self.buf.rfind('\n') + 1
- if p >= 0:
- self.do_write(self.buf[:p])
- self.buf = self.buf[p:]
+ p = data.rfind('\n') + 1
+ assert p >= 0
+ if self.buflen + len(data) < self.bufsize:
+ if p == 0:
+ self.buf.append(data)
+ self.buflen += len(data)
+ else:
+ if self.buflen:
+ self.do_write(''.join(self.buf))
+ self.do_write(data[:p])
+ self.buf = [data[p:]]
+ self.buflen = len(self.buf[0])
+ else:
+ if self.buflen + p < self.bufsize:
+ p = self.bufsize - self.buflen
+ if self.buflen:
+ self.do_write(''.join(self.buf))
+ assert p >= 0
+ self.do_write(data[:p])
+ self.buf = [data[p:]]
+ self.buflen = len(self.buf[0])
# ____________________________________________________________
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit