Author: Armin Rigo <[email protected]>
Branch: buffer-readline
Changeset: r44683:4a4c68916fc2
Date: 2011-06-04 07:06 +0200
http://bitbucket.org/pypy/pypy/changeset/4a4c68916fc2/
Log: Use self.buf=None for the common case of no buffer.
diff --git a/pypy/rlib/streamio.py b/pypy/rlib/streamio.py
--- a/pypy/rlib/streamio.py
+++ b/pypy/rlib/streamio.py
@@ -767,21 +767,25 @@
if bufsize == -1: # Get default from the class
bufsize = self.bufsize
self.bufsize = bufsize # buffer size (hint only)
- self.buf = "" # raw data (may contain "\n")
+ self.buf = None # raw data (may contain "\n")
self.bufstart = 0
def flush_buffers(self):
- if self.buf:
+ if self.buf is not None:
try:
self.do_seek(self.bufstart-len(self.buf), 1)
except MyNotImplementedError:
pass
else:
- self.buf = ""
+ self.buf = None
self.bufstart = 0
def readline(self):
- i = self.buf.find('\n', self.bufstart)
+ if self.buf is not None:
+ i = self.buf.find('\n', self.bufstart)
+ else:
+ self.buf = ''
+ i = -1
#
if i < 0:
self.buf = self.buf[self.bufstart:]
@@ -791,7 +795,7 @@
data = self.do_read(bufsize)
if not data:
result = self.buf # end-of-file reached
- self.buf = ''
+ self.buf = None
return result
startsearch = len(self.buf) # there is no '\n' in buf so far
self.buf += data
@@ -805,31 +809,36 @@
return result
def peek(self):
+ if self.buf is None:
+ return ''
if self.bufstart > 0:
self.buf = self.buf[self.bufstart:]
self.bufstart = 0
return self.buf
def tell(self):
- return self.base.tell() - (len(self.buf) - self.bufstart)
+ pos = self.base.tell()
+ if self.buf is not None:
+ pos -= (len(self.buf) - self.bufstart)
+ return pos
def readall(self):
result = self.base.readall()
- if self.buf:
+ if self.buf is not None:
result = self.buf[self.bufstart:] + result
- self.buf = ''
+ self.buf = None
self.bufstart = 0
return result
def read(self, n):
- if not self.buf:
+ if self.buf is None:
return self.do_read(n)
else:
m = n - (len(self.buf) - self.bufstart)
start = self.bufstart
if m > 0:
result = self.buf[start:] + self.do_read(m)
- self.buf = ''
+ self.buf = None
self.bufstart = 0
return result
elif n >= 0:
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit